Сценарий проверки на стороне клиента не создается для частичных представлений, выбранных с использованием AJAX - PullRequest
2 голосов
/ 21 декабря 2010

Я пытаюсь настроить проверку на стороне клиента с помощью MicrosoftMvcJQueryValidation для работы с отправленными формами ajax.Он прекрасно работает, если частичный вид отображается непосредственно из вида.Однако, когда я пытаюсь извлечь его через XHR, например, чтобы показать его в диалоге JQuery, клиентский javascript проверки не генерируется для выходного html.Есть идеи?

Рабочий код - частичное представление отображается с использованием 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();%>

Не рабочий код - частичное представление выбирается с помощью функции load () JQuery.

Представление:

<%@ 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());
}

Спасибо.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Это произойдет для всех частичных представлений, которые возвращают JavaScript, вставленный в DOM через AJAX.Проблема в том, что JavaScript, возвращенный с частичным представлением, не выполняется / интерпретируется, когда он вставляется в документ.

К сожалению, поскольку то, с чем вы имеете дело, генерируется JavaScript, я могу объяснить, почему у вас возникла проблемано я в недоумении для решения.Если бы вы написали эту функцию, я бы предложил добавить ее в OnComplete.Все, что я могу предложить, это то, что это ограничение JavaScript и начать искать там.

Кстати: это выглядит многообещающе http://adammcraventech.wordpress.com/2010/06/11/asp-net-mvc2-ajax-executing-dynamically-loaded-javascript/

0 голосов
/ 22 декабря 2010

После прочтения блога 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');
...