2009-08-04 46 views
2

我剛剛完成了我的第一個asp.net mvc網站,但我對驗證的穩健性並不滿意。asp.net mvc添加驗證原因模型爲空

我在驗證讀了,然後添加下面的代碼在我的UsersController我的編輯操作:

if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 

我只是做了測試就這個問題和我現在在我看來得到錯誤,其中型號爲空值。

<% using (Html.BeginForm()) 
    {%> 
<fieldset> 
    <legend>Fields</legend> 
    <p> 
     <label for="Email"> 
      Login Name: 
      <%= Model.loginName%> 
     </label> 
    </p> 
    <p> 

所以在上面的模型是空的,所以我在Model.loginName上得到一個異常。任何想法這裏發生了什麼。如果我刪除上面的代碼(驗證)一切工作正常。 (除了然後我就可以把垃圾在我的數據庫。

回答

4

見我就類似話題的響應。

Validating form using ModelState

每次添加一個模型誤差的ModelState中周而復始,調用View asp.net MVC框架試圖尋找未遂值另您應該查看該用戶_對象返回強類型查看

if (user_.firstname.Trim().Length == 0) 
{ 
    ModelState.AddModelError("firstname", "First Name is required."); 
    ModelState.SetModelValue("firstname", ValueProvider["firstname"]); 

    return View(user_); 
} 
+0

這裏有類似的討論 - http://forums.asp.net/p/1377232/2900140.aspx#2900140 – RichardOD 2009-08-04 07:30:48

0

在你的控制器,你應該添加重載的方法:。

public ViewResult UpdateUser() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult UpdateUser(user data) 
    { 
     if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 
     return View(); 
    } 

有了這個解決方案中的第二種方法模式將不能爲null

1

你得到一個模型零錯誤,因爲你沒有傳遞模型視圖...有什麼來自阻止你只是這樣做?

E.g.

if (user_.firstname.Trim().Length == 0) 
{ 
    ModelState.AddModelError("firstname", "First Name is required."); 
    return View(user_); 
} 

雖然這應該作爲一個工作...你應該真正看看你的驗證如何工作。驗證應該在控制器以外的其他地方完成,例如,我將所有驗證都放在模型本身中。

1

我在返回方法中添加了模型,現在它開始工作。

感謝您的回答。

return View(contactToEdit);