使用不在Html.BegingForm()方法内的Html.EditorFor()方法在视图中添加验证属性属性

时间:2012-11-12 00:01:18

标签: asp.net-mvc-3 razor jquery-validate unobtrusive-validation

我注意到验证属性仅添加到通过Html.EditorFor()辅助方法创建的元素中,并且位于Html.BegingForm()方法内,分别创建“Form”标记和属性。

除了手动创建元素和属性之外,还有什么方法可以将所需的验证属性添加到使用辅助方法创建的元素中,而不是在Html.BegingForm()方法中?

我需要在客户端进行验证,并且不希望手动创建所述属性或显式编写此行为,而是利用MVC功能,根据模型上的元数据自动添加所述属性,以便与客户端的jquery-validate插件。

1 个答案:

答案 0 :(得分:2)

仅在以下情况下发出不引人注意的验证属性:

  • UnobtrusiveJavaScriptEnabled标记设置为true
  • ViewContext.FormContext不是null(例如,Html助手在Html.BeginForm区块内执行)

因此,您可以在使用Html帮助程序之前手动创建FormContext并将其分配给ViewContext.FormContext

@{
    ViewContext.FormContext = new FormContext();
}

@Html.TextBoxFor(x => x.SomeProperty)

但是你应该注意到,使用这种方法会丢失Html.BeginForm的嵌套功能,所以如果你想创建一个新的逻辑表单,你需要再次创建new FormContext()并自己管理旧的上下文。