2012-01-04 272 views
4

嗨,大家好我已經看過谷歌,雅虎,找不到答案,爲什麼它是我的'@Html.ValidationMessageFor不起作用。'當我運行應用程序時,什麼都不會發生,它允許輸入所有內容。當我嘗試編輯我的編輯視圖中的項目時,它也會崩潰。我有以下內容:@ Html.ValidationMessageFor無法正常工作

<div class="editor-label"> 
     @* @Html.LabelFor(model => model.Posted)*@ 
    </div> 
    <div class="editor-field"> 
     @Html.HiddenFor(model => model.Posted, Model.Posted = DateTime.Now) 
     @Html.ValidationMessageFor(model => model.sendinghome) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Cartypes) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Cartypes) 
     @Html.ValidationMessageFor(model => model.Cartypes) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.RegNum) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.RegNum) 
     @Html.ValidationMessageFor(model => model.RegNum) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Regprice) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Image) 
     @Html.ValidationMessageFor(model => model.Regprice) 
    </div> 
+0

您應該顯示更多代碼。您的模型如何定義?任何數據註釋屬性?控制器怎麼樣? – 2012-01-04 22:55:30

+0

一切工作罰款你想看到什麼?這是驗證不起作用?控制器如何影響它?因爲代碼的運行和工作正常,只有當我編輯 – user1128756 2012-01-04 22:57:43

+3

如果一切正常,這個問題有什麼意義?沒有看到要驗證的內容,我無法回答你的問題。那麼你的驗證規則是如何定義的?控制器如何處理模型的有效性? – 2012-01-04 22:59:09

回答

28

以下是驗證如何工作。

比方說,你有以下型號:

public class MyModel { 
    [Required] 
    public string MyProperty { get; set; } 
} 

注意Required屬性,它是一個數據註解屬性,該屬性指定MyProperty是必填字段。

MyModel是使用下面的視圖(MyView.cshtml):

@model MyNamespace.MyModel 

@using (Html.BeginForm("MyAction", "MyController")) { 
    @Html.LabelFor(m => m.MyProperty) 
    @Html.TextBoxFor(m => m.MyProperty) 
    @Html.ValidationMessageFor(m => m.MyProperty) 

    <input type="submit" value="Click me"> 
} 

然後,當這種形式被髮布到的MyControllerMyAction行動,將會進行模型的驗證。你需要做的是檢查你的型號是否有效有效或不。 可以使用ModelState.IsValid屬性完成。

[HttpPost] 
public ActionResult MyAction(MyModel model) { 
    if (ModelState.IsValid) { 
     // save to db, for instance 
     return RedirectToAction("AnotherAction"); 
    } 
    // model is not valid 
    return View("MyView", model); 
} 

如果驗證失敗,則視圖將被再次使用存在於ModelState對象中的不同的錯誤渲染。這些錯誤將被ValidationMessageFor助手使用和顯示。

+2

很好的解釋。 – 2012-01-05 02:35:29

1

確切地說,Bertrand解釋它是正確的,你也可以使用jquery驗證,並消除在瀏覽器上驗證的服務器調用。 (asp.net mvc負責自動驗證模型上的規則)

+10

除了你*不應該*消除服務器端驗證,因爲你不能指望有史以來的客戶端驗證。客戶端驗證是一項很好的增強功能,但只有服務器端驗證可以信任。 – TLS 2012-01-05 20:25:30