Frage

In ASP.Net MVC, mit einer Form mehr oder weniger wie folgt aus:

<% using (Ajax.BeginForm(new AjaxOptions() { OnSuccess="onSuccess"})) {%>
  <p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
  </p>
  <p><input type="submit" value="Submit comment" /></p>
<% } %>

Wie kann die onSuccess Javascript-Funktion wissen, ob das Ergebnis einer andere Version des Formulars ist, weil sie nicht bestätigen, ein Kommentar als div in der Liste der Kommentare oder einem Login-Seite hinzuzufügen, die für die Protokollierung Pop-up sein sollten in?

Keine korrekte Lösung

Andere Tipps

Sie können das in Ihrer Rückkehr JSON definieren oder was auch immer Transportmethode Sie verwenden?

Nicht sicher, ob das, was Sie suchen, aber auch: das ist, wie die onSuccess Funktion aufgerufen wird:

YourFunction(ajaxContext);

Ajaxcontext wie folgt definiert ist:

AjaxContext ajaxContext = new AjaxContext(request, updateElement, loadingElement, ajaxOptions.InsertionMode);

Sie sollten den Code in Ihrem Ajax-Formular mit einer neuen Teilansicht ersetzen, dann werden Sie diese Teilansicht von Ihrem Controller zurück. Die Teilansicht würde darin bestehen, in:

<p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>

Auf diese Weise Ihre Teilansicht funktioniert wie eine normale Ansicht. Leider gibt es keine einfache Möglichkeit, Javascript, als Antwort ausgeführt werden (da Sie mit Blick reagieren). Es wäre einfacher, wenn Ihre Antwort ein JSON-String ist, aber in diesem Fall können Sie nicht den AjaxForm verwenden, da der JSON-String als Ergebnis auf dem Bildschirm wiedergegeben würde die Form einreichen (und die Verarbeitung seine Antwort). Das kann funktionieren, obwohl (ich habe es nicht ausprobiert):

<p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<script type="text/javascript">
    function processResponse(data){
        // blah blah blah
    }
    processResponse(<%= ViewData["dataFromTheController"] %>);
</script>

Ihre konnte einfach verschiedene CSS-Klassen an die Root-Elemente Ihrer Antworten (zB .form, .comments, .login) hinzuzufügen. Und dann (zum Beispiel in jQuery):

var response = $(responseContent);
$('.form', response).each(function() {
    // $(this) is form
});
$('.comments', response).each(function() {
    // $(this) is comments
});
$('.login', response).each(function() {
    // $(this) is login page
});
  

Wie kann die onSuccess Javascript   Funktion wissen, ob das Ergebnis   weil es eine andere Version des Formulars   nicht validieren, um einen Kommentar als div   in die Liste der Kommentare oder einem Protokoll   in-Seite, die Pop-up sollte für   Anmelden?

Die kurze Antwort ist, dass es nicht, wenn Sie es ausdrücklich bestätigen. Das ist, weil JSON als String transportiert wird und wenn die Client-Seite Javascript wird die Zeichenfolge.

Für den Anfang sollten Sie wissen, implizit, welche Art von Objekt zu erwarten. Wenn Sie einen Web-Service @ Cars/List rufen dann wissen Sie das zurückgegebene Objekt eine Liste von Autos sein wird, und Sie analysieren, die in geeigneter Weise in Ihrem Client. Sie können in Fehler ausgeführt, die Sie entsprechend der Anforderung durch retrying behandeln sollte oder sie Protokollierung oder eine Fehlermeldung zeigt.

Ich würde Ihnen empfehlen, die jquery.form Plugin zu verwenden, mit diesem Sie können eine normale Form wie ein ajax man handeln müssen, wie folgt aus:

 <script type="text/javascript"> 
        // wait for the DOM to be loaded 
        $(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                alert("Thank you for your comment!"); 
            }); 
        }); 
    </script> 

<form id="myForm" action="comment.php" method="post"> 
    Name: <input type="text" name="name" /> 
    Comment: <textarea name="comment"></textarea> 
    <input type="submit" value="Submit Comment" /> 
</form>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top