2

MicrosoftMvcJQueryValidationを使用してクライアント側の検証をセットアップし、ajaxで送信されたフォームを処理しようとしています。部分ビューがビューから直接レンダリングされる場合は、完全に正常に機能します。ただし、たとえばJQueryダイアログに表示するために、XHRを介してフェッチしようとすると、出力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();%>

コードが機能しない-部分ビューはJQueryload()関数でフェッチされます。

意見:

<%@ 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 に答える