【发布时间】:2012-01-26 04:01:14
【问题描述】:
我在 MVC 3 应用程序中创建了一个局部视图。这个视图有一个像这样的强类型模型:
public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;
set;
} ...
}
在我的操作方法中,我像这样调用 PartialView 方法
PartialView("ProductViewModel", products[0]);
但是在页面上我看不到验证逻辑的任何标记,如果页面上有任何错误,则不会发生任何事情。如果我将此局部视图用作编辑器模板,它就可以工作。 任何帮助表示赞赏。
编辑:更具体地说,我有一个 HTML 表单,我想通过 ajax 更新向它添加标记(如果用户单击按钮,我想向该表单添加新标记)。如果我静态地包含这些控件,我的意思是如果我在页面加载时呈现它们,则验证有效,但是如果我通过 ajax 调用将控件添加到该表单,则不会为这些控件插入验证标记。我的部分视图如下所示:
@Html.LabelFor(x => x.ProductPrice)
@Html.TextBoxFor(x => x.ProductPrice)
@Html.ValidationMessageFor(x => x.ProductPrice)
我的表单如下所示:
@using (Html.BeginForm())
{
<div id="div_Products">
@Html.EditorFor(x => x)
</div>
<input type="submit" value="Compare" />
}
上面的代码运行良好,验证有效。在服务器端,我调用了一个如下所示的操作方法:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };
return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}
我发现 MVC 引擎只有在发现控件位于表单控件内时才会插入这些验证标记。当我尝试通过 ajax 调用更新我的表单控件时,MVC 无法知道它们将被放置在表单元素中,这就是为什么它不会为它们发出任何验证逻辑的原因,我想。
【问题讨论】:
-
编辑器“发出”验证错误等是有道理的,而视图则不会。我们可以查看您的视图的代码吗?
-
问题是 MVC 只有在发现控件位于表单内时才会插入验证标记。问题是我想通过 ajax 更新将标记添加到表单控件,但是这样 MVC 引擎不知道该标记将被插入到表单元素中,因此它不会发出任何验证标记。
-
你可以用一些 Html.ValidationMessageFor() 代码强制它。就像我说的,请向我们展示您的观点。
标签: asp.net-mvc-3 validation data-annotations unobtrusive-javascript