2010-12-21 2 views
2

Ich versuche, clientseitige Validierung mit MicrosoftMvcJQueryValidation für die Arbeit mit Ajax eingereichten Formularen einzurichten. Es funktioniert einwandfrei, wenn die Teilansicht direkt aus einer Ansicht gerendert wird. Wenn ich jedoch versuche, es über XHR zu holen, um es beispielsweise in einem JQuery-Dialog anzuzeigen, wird Client-Validierung Javascript nicht für die Ausgabe HTML generiert. Irgendwelche Ideen?Clientseitig Validierungsskript wird nicht für Teilansichten generiert, die mit AJAX abgerufen werden

Arbeits Code - Teilansicht wird mit Html.RenderPartial gemacht:

Ausblick:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<% Html.RenderPartial("New"); %> 
</asp:Content> 

Teilansicht:

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

Nicht Code arbeiten - Teilansicht ist mit JQuery load() Funktion abgerufen.

Ausblick:

<%@ 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> 

Relevante Controller-Aktion:

public PartialViewResult New(int id) 
{ 
    return PartialView(service.GetProduct()); 
} 

Dank.

Antwort

2

Dies wird für alle Teilansichten, die über AJAX in das DOM eingefügtes JavaScript zurückgeben. Das Problem ist, dass das mit der Teilansicht zurückgegebene JavaScript nicht ausgeführt/interpretiert wird, wenn es in das Dokument eingefügt wird.

Leider, weil, was Sie beschäftigen, ist generierte JavaScript kann ich erklären, warum Sie das Problem erleben, aber ich bin für eine Lösung ratlos. Wäre dies eine Funktion, die du geschrieben hast, würde ich vorschlagen, sie der OnComplete hinzuzufügen. Alles, was ich anbieten kann, ist, dass dies eine JavaScript-Beschränkung ist und ich dort anfangen soll.

BTW: Das sieht vielversprechend aus http://adammcraventech.wordpress.com/2010/06/11/asp-net-mvc2-ajax-executing-dynamically-loaded-javascript/

0

Nach dem Blog ARM Lesen erwähnt es die Lösung scheint, hängt wirklich , wie man die Teilansicht zu laden. Was schließlich für mich gearbeitet ist __MVC_EnableClientValidation rufen nach Ansicht zu einem Element zugeordnet wurde:

$.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'); 
Verwandte Themen