2012-01-04 370 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