Zol*_*iqa 8 validation unobtrusive-javascript data-annotations asp.net-mvc-3
我在MVC 3应用程序中创建了一个局部视图.此视图具有如下强类型模型:
public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;
set;
} ...
}
Run Code Online (Sandbox Code Playgroud)
在我的动作方法中,我像这样调用PartialView方法
PartialView("ProductViewModel", products[0]);
Run Code Online (Sandbox Code Playgroud)
但是在页面上我看不到验证逻辑的任何标记,如果页面上有任何错误,则没有任何反应.如果我将此局部视图用作编辑器模板,则可以正常工作.任何帮助表示赞赏.
编辑:更具体地说,我有一个HTML表单,我想通过ajax更新添加标记(如果用户点击一个按钮,我想在该表单中添加新标记).如果我静态地包含这些控件,我的意思是如果我在页面加载时渲染它们,验证工作,但如果我通过ajax调用向该表单添加控件,则不会为这些控件插入验证标记.我的局部视图看起来像这样:
@Html.LabelFor(x => x.ProductPrice)
@Html.TextBoxFor(x => x.ProductPrice)
@Html.ValidationMessageFor(x => x.ProductPrice)
Run Code Online (Sandbox Code Playgroud)
我的表单看起来像这样:
@using (Html.BeginForm())
{
<div id="div_Products">
@Html.EditorFor(x => x)
</div>
<input type="submit" value="Compare" />
}
Run Code Online (Sandbox Code Playgroud)
上面的代码效果很好,验证工作正常.在服务器端,我调用一个看起来像这样的动作方法:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };
return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}
Run Code Online (Sandbox Code Playgroud)
我发现MVC引擎只有在发现控件位于表单控件内时才会插入那些验证标记.当我尝试通过ajax调用更新我的表单控件时,MVC无法知道它们将被放置在表单元素中,这就是为什么它不会为它们发出任何验证逻辑,我想.
Rob*_*Rob 10
将它放在部分视图的顶部,您将获得渲染到html输出中的验证消息:
if (this.ViewContext.FormContext == null)
{
this.ViewContext.FormContext = new FormContext();
}
Run Code Online (Sandbox Code Playgroud)
如果您使用ajax添加表单字段,则可以使用以下内容将新字段添加到DOM /页面后触发新字段以添加到验证中:
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
Run Code Online (Sandbox Code Playgroud)
编辑/更新(2013年美联储2013年):我刚刚在Visual Studio 2012中破解了部分视图的FormContext,似乎使用最新版本的jQuery和Validation等我不需要添加3用于验证的javascript(上面)行在ajax上动态工作,这太棒了!
您是否在 web.config 或视图本身中启用了不显眼的验证?
在 web.config 中:
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
或内部代码:
HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4406 次 |
| 最近记录: |