多步驟註冊流程(如四步驟完善單一 UserViewModel)中,ModelState.IsValid 會檢查所有屬性,導致前幾步驟因缺少後續欄位而驗證失敗。本文提供實用解決方案。
public class UserViewModel
{
[Required] public int Step { get; set; }
[Required, StringLength(20)] public string Name { get; set; }
[RegularExpression(...)] public int? Age { get; set; }
[Required] public string Post { get; set; }
public int? Salary { get; set; }
[Required] public string University { get; set; }
public int? GraduationYear { get; set; }
[Required, EmailAddress] public string Email { get; set; }
public int? Mobile { get; set; }
// StepList 供下拉選單使用
}
Step 值手動驗證當前步驟所需欄位。Step 動態清除無關 ModelState 錯誤。public ActionResult Register(UserViewModel model)
{
if (model.Step == 1)
{
ModelState.ClearValidationState(nameof(model.Name));
ModelState.ClearValidationState(nameof(model.Age));
if (!TryValidateModel(model)) return View("Step1", model);
}
// Step 2, 3, 4 同理...
return RedirectToAction("Complete");
}
關鍵在於 ModelState.ClearValidationState 或 TryValidateModel 精確控制驗證範圍。