2

我正在尝试使用 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());
}

谢谢。

4

2 回答 2

2

这将发生在所有返回通过 AJAX 插入 DOM 的 JavaScript 的局部视图上。问题在于,部分视图返回的 JavaScript 在插入文档时没有执行/解释。

不幸的是,因为您正在处理的是生成的 JavaScript,所以我可以解释您遇到问题的原因,但我对解决方案一无所知。如果这是您编写的函数,我建议将其添加到 OnComplete。我所能提供的是,这是一个 JavaScript 限制,并开始寻找那里。

顺便说一句:这看起来很有希望http://adammcraventech.wordpress.com/2010/06/11/asp-net-mvc2-ajax-executing-dynamically-loaded-javascript/

于 2010-12-21T18:00:21.043 回答
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');
于 2010-12-22T01:15:53.510 回答