要在asp.net mvc3中进行不显眼的验证工作,你必须使用这篇非常好的帖子中提到的html助手@Html.BeginForm()
:http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html。
不使用帮助程序不会触发不显眼的验证。我可以验证一下。
您能否解释一下帮助@Html.BeginForm()
做什么以便在提交表单时触发不引人注目的验证?
你能解释一下我怎样才能手动执行此操作(读取允许不引人注目的验证而不调用@Html.BeginForm()
)?
请注意,我知道我可以使用$("#myform").valid()
调用不引人注目的验证,但我想知道帮助程序背后的魔力以及如何重现它。
答案 0 :(得分:2)
在您的视图中写下它,它将起作用:
ViewContext.FormContext = ViewContext.FormContext ?? new FormContext();
当代码在@Html.Beginform内(在同一视图中)时,则从元数据中获取html元素验证属性,而在其他情况下,则不是。
答案 1 :(得分:2)
当您致电BeginForm
时(请FormExtensionsclass
查看MvcForm
),即会创建一个新的FormContext
对象。
如果您查看此类的构造函数(请参阅http://j.mp/WrmAyk了解MvcForm类),您将看到它创建了一个新的_viewContext.FormContext = new FormContext();
对象:tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
。
当使用HTML帮助器呈现input,textarea或select时,会调用以下内容:GetUnobtrusiveValidationAttributes
,它负责从模型元数据中呈现验证属性。
此FormContext formContext = ViewContext.GetFormContextForClientValidation();
if (formContext == null)
{
return results;
}
方法(请参阅HtmlHelper类的http://j.mp/Wrml6F)检查在呈现属性之前FormContext是否为null:
FormContext
这就是为什么除非您在表单中,否则不会呈现验证属性。你可以通过创建一个'假'{{1}}来解决这个问题,就像@karaxuna建议的那样。