Domanda

In ASP.Net MVC, hanno una forma più o meno in questo modo:

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

Come può la funzione Javascript onSuccess sapere se il risultato è un'altra versione del modulo perché non ha convalidato, un commento come un div da aggiungere alla lista dei commenti o di un registro in pagina che dovrebbe essere pop-up per la registrazione in?

Nessuna soluzione corretta

Altri suggerimenti

È possibile definire che nel tuo JSON ritorno o qualunque metodo di trasporto utilizzare?

Non sono sicuro se questo è quello che stai cercando, ma anche: questo è come la funzione onSuccess si chiama:

YourFunction(ajaxContext);

AjaxContext è definito come segue:

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

È necessario sostituire il codice all'interno del modulo ajax con una nuova vista parziale, quindi si tornerà quella vista parziale dal controller. La vista parziale consisterebbe in:

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

In questo modo, la vostra visione parziale funziona proprio come una vista normale. Purtroppo non esiste un modo semplice per eseguire javascript come risposta (dal momento che si sta rispondendo con una vista). Sarebbe più facile se la vostra risposta è stata una stringa JSON, ma in quel caso, non è possibile utilizzare l'AjaxForm perché la stringa JSON sarebbe resa sullo schermo a seguito della presentazione del modulo (e l'elaborazione la sua risposta). Questo può funzionare anche se (non l'ho provato):

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

Il tuo potrebbe semplicemente aggiungere diverse classi CSS per gli elementi radice delle vostre risposte (ad esempio .Form, .comments, .login). E poi (per esempio 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
});
  

Come può l'onSuccess Javascript   funzione di sapere se il risultato è   un'altra versione del modulo, perché   non ha convalidato, un commento come un div a   aggiungere alla lista dei commenti o un registro   nella pagina che dovrebbe essere Pop up per   login?

La risposta breve è che non è possibile a meno che non convalidare in modo esplicito. Questo perché JSON viene trasportato come una stringa e quando il lato client JavaScript ottiene la stringa.

Per cominciare si dovrebbe implicitamente sapere che tipo di oggetto da aspettarsi. Se si sta chiamando un servizio web @ Cars/List poi si sa l'oggetto restituito sarà un elenco di vetture e si analizza che in modo appropriato nel client. Si può incorrere in errori che si dovrebbe gestire in modo appropriato dal ritentare la richiesta o la registrazione o mostrando un messaggio di errore.

ti consiglierei di utilizzare la jquery.form plug , con questo si può avere una forma normale di agire come un unico ajax, in questo modo:

 <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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top