2009-08-18 5 views
0

- Ausführen in ASP.NET MVC neben jQuery -Kann eine PartialView ohne ein Postback erneut gerendert werden?

Ich benutze jQuery, um einen <LI> Block als eine Liste von Dropdown-Menüelementen zu rendern. Es gibt 3 Einträge in der Liste, wenn der Benutzer _nicht angemeldet ist - 4 Einträge, wenn er_ eingeloggt ist. Dieser 4. Eintrag muss einige Bedingungen ausführen, bevor er genau entscheiden kann, welche Nutzlast er trägt, also habe ich diesen Code in einem .ascx Kontrolle und die Hauptseite Aufrufe:

<div id="loginBox"> 
    <% Html.RenderPartial("showLoginStatus"); %> 
</div> 

, um zu entscheiden, wie es zu rendern.

So viel funktioniert, solange ich bereit bin, auf ein Postback zu warten, das der AJAX-basierten Anmeldung folgt. Was ich jetzt tun muss, ist, dass der Code ohne die Seitenaktualisierung ausgeführt wird.

Der Teil der Seite, die entweder den Login-Button oder den Namen des Benutzers anzeigt wie folgt aussieht:

var form = $("#loginForm"); 
    form.submit(function() { 
     var data = form.serialize(); 
     $.post(form.attr("action"), data, function(result, status) { 
      if (result.Success) { 
       $(".showLoggedUser").html(result.UserName + '<br /><a href="/Admin/Account/LogOut">Log Out</a>'); 
       //how can I force the code contained in 'showLoginStatus.ascx' to render at this point? 
       api.close(); 
      } else { 
       $('.loginErrors').html(result.ErrorMessage); 
      } 
     }, "json"); 
     return false; 
    }); 
}); 
+0

Haben Sie überlegt, ein Updatepanel zu verwenden? Obwohl updatepanels dafür bekannt sind, dass sie "langsam" sind, verwenden Sie firebug, um zu sehen, wie viele Daten tatsächlich zurückgesendet werden. Es mag zwar klein sein, aber es sollte Ihnen viel Kopfzerbrechen bereiten und den Seitenlebenszyklus im Zaum halten –

Antwort

1

Sie können den HTML-Code von ShowLoginStatus.ascx im Ergebnis (wahrscheinlich JSON) zurückgeben.
Here ist, wie Sie die Ansicht in eine Zeichenfolge umwandeln können.

Ein anderer Ansatz besteht darin, abhängig vom Ergebnis unterschiedliche Inhaltstypen aus der Aktion zurückzugeben.

  1. Der Benutzer gibt die Anmeldeinformationen ein und klickt auf LogIn.
  2. Server überprüft sie und:
    1. Wenn richtig - macht Teilansicht (so das Ergebnis ist HTML).
    2. Wenn nein - macht JSON mit der Fehlerbeschreibung usw.
  3. Auf dem Client - wenn der Inhalt HTML - es ist dann egal wo auf sie benötigt wird.
  4. Wenn der Inhalt JSON ist - zeigen Sie dem Benutzer Fehler und analysieren Sie das Ergebnis weiter.

Also Ihr JavaScript wird wie folgt aussehen:

var form = $("#loginForm"); 
form.submit(function() { 
    var data = form.serialize(); 
    $.post(form.attr("action"), data, function(result, status) { 
     // Write your isJson function to check the result type 
     if (!isJson(result)) { 
      $(".showLoggedUser").html(result); 
      api.close(); 
     } else { 
      $('.loginErrors').html(result.ErrorMessage); 
     } 
    }); // DO NOT SPECIFY RESULT TYPE 
    return false; 
}); 

});

0

Was ist, wenn die Ajax-Anforderung war eine Teilansicht zurückzukehren, die den showLoginStatus Inhalt enthalten?

d. H. Haben Sie eine Aktion, die der Ajax aufruft, die eine PartialView (.ascx) zurückgibt, und diese Teilansicht besteht aus der showLoginStatus-Ansicht und jedem zusätzlichen Markup, das Sie benötigen.

Vielleicht werfen Sie einen Blick auf Ajax.ActionLink und den AjaxOptions-Parameter, um einige andere Ideen zu bekommen?

Verwandte Themen