Pergunta

Em ASP.Net MVC, ter uma forma mais ou menos assim:

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

Como pode a função de know onSuccess Javascript se o resultado é uma outra versão do formulário porque não validar, um comentário como um div para adicionar à lista de comentários ou um registro na página que deve ser pop-up para o registo em?

Nenhuma solução correta

Outras dicas

Você pode definir isso em seu retorno JSON ou qualquer método de transporte que você usa?

Não tenho certeza se é isso que você está procurando, mas também: é assim que a função onSuccess é chamado:

YourFunction(ajaxContext);

AjaxContext é definido da seguinte forma:

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

Você deve substituir o código dentro de seu formulário de ajax com uma nova visão parcial, então você vai voltar essa visão parcial do seu controlador. A vista parcial consistiria em:

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

Desta forma, sua visão parcial funciona como uma visão regular. Infelizmente não há nenhuma maneira simples de executar javascript como uma resposta (desde que você está respondendo com uma vista). Seria mais fácil se a sua resposta foi uma string JSON, mas, nesse caso, você não pode usar o AjaxForm porque a string JSON seria processado na tela como resultado de enviar o formulário (e processar a sua resposta). Isso pode funcionar embora (Eu não tentei isso):

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

Seu poderia simplesmente adicionar diferentes classes CSS para os elementos raiz de suas respostas (por exemplo .form, .Comentários, .login). E então (por exemplo, em 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
});

Como pode o onSuccess Javascript função de saber se o resultado é outra versão do formulário porque não validou, um comentário como um div de adicionar à lista de comentários ou um log na página que deve ser pop-up para logging in?

A resposta curta é que não pode a menos que você validá-lo explicitamente. Isso porque JSON é transportado como uma string e quando o lado do cliente Javascript recebe a string.

Para começar você deve saber implicitamente que tipo de objeto que esperar. Se você está chamando um web service @ Cars/List então você sabe o objeto retornado será uma lista de carros e você analisar que adequadamente em seu cliente. Você pode correr em erros que você deve lidar de forma adequada por repetindo o pedido ou registrá-las ou mostrar uma mensagem de erro.

Eu recomendo que você use o jquery.form plug-in , com este você pode ter uma forma normal de agir como um um ajax, como este:

 <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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top