2012-03-29 62 views
0

是否有可能通过ModelState.AddModelError(inputId)为输入添加一个错误,以在UI上产生错误突出显示并使其必须像客户端验证一样行为,即当用户在输入错误类中更改时将被删除。asp.net mvc通过ModelState输入添加和隐藏错误

+0

是的,这是它通过设计工作的方式。如果它不适用于您,请确保您使用的属性名称实际上与在页面上呈现的模型属性匹配,并且您已将验证消息包含在视图中(尽管如此,客户端也应该这样做) )。 – tvanfosson 2012-03-29 12:40:35

回答

2

型号:

public class MyViewModel 
{ 
    [Required] 
    public string Foo { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ModelState.AddModelError("foo", "Foo is required"); 
     return View(new MyViewModel()); 
    } 
} 

查看:

@model MyViewModel 

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Foo) 
    @Html.ValidationMessageFor(x => x.Foo) 
    <button type="submit">OK</button> 
} 

现在,当呈现页面时,富域将红色突出显示一个错误,当用户在字段中键入内容并模糊,错误将被删除。

+0

我需要它来动态生成输入。我没有适合使用属性的模型。 – drunkcamel 2012-03-29 12:41:50

+0

@drunkcamel,客户端验证依赖于数据注释属性。如果您没有合适的属性,您将不得不编写自定义属性并实现“IClientValidatable”接口以指示需要应用的确切的客户端验证规则。如果有自定义验证规则,您还必须编写自定义客户端适配器并使用JavaScript函数转置所有自定义逻辑。 – 2012-03-29 12:48:36