首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 分步驗證 Model 狀態:解決多頁表單逐步驗證難題

     編輯:關於ASP.NET

多步驟註冊流程(如四步驟完善單一 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 供下拉選單使用
}

解決策略

  1. 移除全域 ModelState.IsValid,改在 Action 內依 Step 值手動驗證當前步驟所需欄位。
  2. 使用 TryValidateModel(model, prefix) 僅驗證特定前綴屬性群組。
  3. 自訂 ActionFilter 依 Step 動態清除無關 ModelState 錯誤。
  4. 拆分 ViewModel:每步驟對應獨立 ViewModel,最後由 Service 整合儲存(架構最乾淨但類別較多)。

推薦作法:手動驗證當前步驟

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 精確控制驗證範圍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved