我正在尝试使用MicrosoftMvcJQueryValidation设置客户端验证 使用ajax提交的表单。 如果直接从视图渲染局部视图,它的工作完全正常。 但是,当我尝试通过XHR获取它时,例如在JQuery对话框中显示它, 客户端验证不为输出html生成javascript。 有什么想法吗?
工作代码 - 使用Html.RenderPartial呈现部分视图:
查看:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% Html.RenderPartial("New"); %>
</asp:Content>
部分视图:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Product>" %>
<% Html.EnableClientValidation();%>
<% Html.BeginForm();%>
<%= Html.EditField(m => m.price)%>
<%= Html.ValidationMessageFor(m => m.price)%>
<% Html.EndForm();%>
不工作代码 - 使用JQuery load()函数获取部分视图。
查看:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
....
$("#dialog").load('~/Product/New/');
$("#dialog").dialog("open");
....
<div id="dialog" title=""></div>
</asp:Content>
相关控制器操作:
public PartialViewResult New(int id)
{
return PartialView(service.GetProduct());
}
感谢。
答案 0 :(得分:2)
对于所有返回通过AJAX插入DOM的JavaScript的部分视图,都会发生这种情况。问题是当部分视图插入到文档中时,不会执行/解释返回的部分视图。
不幸的是,因为您正在处理的是生成的JavaScript,我可以解释您遇到问题的原因,但我对解决方案感到茫然。如果这是您编写的函数,我建议将其添加到OnComplete中。我可以提供的是,这是一个JavaScript限制,并开始寻找那里。
BTW:这看起来很有希望http://adammcraventech.wordpress.com/2010/06/11/asp-net-mvc2-ajax-executing-dynamically-loaded-javascript/
答案 1 :(得分:0)
阅读ARM提到的博客后,解决方案似乎真正依赖 关于如何加载局部视图。 最终对我有用的是调用__MVC_EnableClientValidation 视图分配给元素后:
$.get('~/Product/New/', function(data) {
$("#dialog").html(data);
// extracted from MicrosoftMvcJQueryValidation.js
var allFormOptions = window.mvcClientValidationMetadata;
if (allFormOptions) {
while (allFormOptions.length > 0) {
var thisFormOptions = allFormOptions.pop();
__MVC_EnableClientValidation(thisFormOptions);
}
}
},'html');