gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC PartialView 不发出验证标记

转载 作者:行者123 更新时间:2023-12-04 05:41:49 24 4
gpt4 key购买 nike

我在 MVC 3 应用程序中创建了一个局部 View 。这个 View 有一个像这样的强类型模型:

public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;

set;
} ...
}

在我的操作方法中,我像这样调用 PartialView 方法
PartialView("ProductViewModel", products[0]);

但是在页面上我看不到验证逻辑的任何标记,如果页面上有任何错误,则不会发生任何事情。如果我将此部分 View 用作编辑器模板,它会起作用。
任何帮助表示赞赏。

编辑:更具体地说,我有一个 HTML 表单,我想通过 ajax 更新向它添加标记(如果用户单击按钮,我想向该表单添加新标记)。如果我静态地包含这些控件,我的意思是如果我在加载页面时呈现它们,验证会起作用,但是如果我通过 ajax 调用向该表单添加控件,则不会为这些控件插入验证标记。我的部分 View 如下所示:
@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" />
}

上面的代码运行良好,验证有效。在服务器端,我调用了一个 Action 方法,如下所示:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };

return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}

我发现 MVC 引擎只有在发现控件位于表单控件内时才会插入这些验证标记。当我尝试通过 ajax 调用更新我的表单控件时,MVC 无法知道它们将被放置在表单元素中,这就是为什么它不为它们发出任何验证逻辑的原因,我想。

最佳答案

将其放在局部 View 的顶部,您将获得呈现到 html 输出中的验证消息:

if (this.ViewContext.FormContext == null) 
{
this.ViewContext.FormContext = new FormContext();
}

如果您使用 ajax 添加表单字段,您可以触发新字段以添加到验证中,一旦它们使用以下内容添加到 DOM/Page 中:
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");

编辑/更新(23 Fed 2013):
我刚刚在 Visual Studio 2012 中第一次破解了局部 View 的 FormContext,似乎使用最新版本的 jQuery 和 Validation 等,我不需要添加 3 行 javascript(上面)进行验证在 ajax 上动态工作,这很棒!

关于asp.net-mvc-3 - ASP.NET MVC PartialView 不发出验证标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com