Как отправить результат отправки формы AJAX в ASP.Net MVC? - PullRequest
1 голос
/ 31 мая 2009

В ASP.Net MVC форма более или менее похожа на эту:

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

Как функция onSuccess Javascript может узнать, является ли результат другой версией формы, потому что она не проверена, комментарий как div для добавления в список комментариев или страница входа в систему, которая должна быть всплывающей для регистрации в

Ответы [ 5 ]

0 голосов
/ 22 мая 2010

Я бы порекомендовал вам использовать плагин jquery.form , при этом у вас может быть нормальная форма, похожая на ajax, например:

 <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>
0 голосов
/ 01 июня 2009

Как можно включить Javascript onSuccess Функция знает, является ли результат другая версия формы, потому что это не подтвердил, комментарий как div добавить в список комментариев или логи на странице, которая должна появиться для вход в систему?

Короткий ответ: он не может, если вы явно не подтвердите это. Это потому, что JSON транспортируется как строка, и когда клиентская часть Javascript получает строку.

Для начала вы должны неявно знать, какой объект ожидать. Если вы звоните в веб-службу @ Cars/List, то вы знаете, что возвращаемый объект будет списком автомобилей, и вы соответствующим образом проанализируете его в своем клиенте. Вы можете столкнуться с ошибками, которые вы должны обработать надлежащим образом, повторив запрос или зарегистрировав их или отобразив сообщение об ошибке.

0 голосов
/ 31 мая 2009

Вам следует заменить код внутри формы ajax новым частичным представлением, затем вы вернете это частичное представление из вашего контроллера. Частичное представление будет состоять из:

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

Таким образом, ваше частичное представление работает так же, как обычное представление. К сожалению, не существует простого способа выполнить javascript в качестве ответа (так как вы отвечаете представлением). Было бы проще, если бы ваш ответ был строкой Json, но в этом случае вы не можете использовать AjaxForm, потому что строка Json будет отображаться на экране в результате отправки формы (и обработки ее ответа). Это может работать, хотя (я не пробовал):

<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>
0 голосов
/ 31 мая 2009

Вы можете просто добавить различные классы CSS к корневым элементам ваших ответов (например, .form, .comments, .login). И затем (например, в 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
});
0 голосов
/ 31 мая 2009

Вы можете определить это в своем возвращаемом JSON или любом другом используемом вами транспортном методе?

Не уверен, что это то, что вы ищете, но также: вот как вызывается функция onSuccess:

YourFunction(ajaxContext);

AjaxContext определяется следующим образом:

AjaxContext ajaxContext = new AjaxContext(request, updateElement, loadingElement, ajaxOptions.InsertionMode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...