2

您好我有一個方法在我的控制器輸入的數據沒有錯誤,並具有以下代碼我的ModelState始終是無效的,即使有由用戶

if (ModelState.IsValid) 

{ 

    IDataOperations ops = DataSession.GetDataOperations(null); 
    List<Department> dept = new List<Department>(); 
    ops.Load(dept); 
    ops.Commit(); 
    int deptId = dept[dept.Count - 1].Id + 1; 
    Department department = new Department() 
    { 
     Id = deptId, 
     CompanyId = deptModel.CompanyId, 
     Active = deptModel.Active, 
     Name = deptModel.Name 
    }; 

    ops.Create(department); 
    ops.Commit(); 
    return RedirectToAction("CompanyDepartment", "Task"); 
} 

else 

{ 
    //some code 

頁面運行每次它總是去其他部分,意思是模型狀態是無效的。 如何檢查頁面中的錯誤位置,可以添加哪些代碼以顯示頁面錯誤的位置。

謝謝

回答

0

上次我有這樣的問題,這是因爲什麼是不應該是null。

將斷點在你的代碼上,你說行:

if (modelState.IsValid) 

你可以找到其中的部分代碼通過下鑽到ModelState中有錯誤。你應該可以從那裏解決它。

1

很可能問題出在您的模型中未顯示在視圖中的字段中。如果您正在執行驗證,請在頁面上輸入驗證摘要。 (指定不應忽略字段級別的錯誤。)這將顯示所有錯誤,包括那些不屬於可見字段的錯誤。

3

你可以通過下面的代碼,通過debbuging通過這個,你會看到,你的代碼將進入for循環,你可以理解,錯誤是什麼。

#if DEBUG 
     /// <summary> 
/// Output the properties which are causing the issues when 
/// the model is binding. 
/// </summary> 
    public static void ModelStateErrors (ModelStateDictionary modelState) 
     { 
      var errors = modelState.Where(a => a.Value.Errors.Count > 0) 
       .Select(b => new { b.Key, b.Value.Errors }) 
       .ToArray(); 

      foreach (var modelStateErrors in errors) 
      { 
       System.Diagnostics.Debug.WriteLine("...Errored When Binding.",         modelStateErrors.Key.ToString()); 

      } 

     } 
#endif 
0

通過執行以下操作,您可以檢查錯誤的位置。

var errors = ModelState.Values.SelectMany(v => v.Errors); 
     if (ModelState.IsValid) 
     { 

     } 
0

Please see this image向下鑽取模型狀態 1)選擇值 2)深入每個成員,並查找錯誤

請找圖像鏈接,看看 @RBT

+0

這不是一個答案。看起來你正在評論。 – RBT 2017-01-04 06:55:28

-3

時自動生成的場創建視圖並複製必需的字段,然後將其中的一些隱藏起來,只要你想要

相關問題