Как отправить результат отправки формы AJAX в ASP.Net MVC?

StackOverflow https://stackoverflow.com/questions/932539

  •  06-09-2019
  •  | 
  •  

Вопрос

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

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

Нет правильного решения

Другие советы

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

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

YourFunction(ajaxContext);

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

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

Вам следует заменить код внутри вашей формы 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>

Вы можете просто добавить разные классы 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
});

Как функция onsuccess javascript может знать, является ли результат еще одной версией формы, потому что она не проверяла, комментарий в качестве Div для добавления в список комментариев или страницу журнала, которая должна появиться для входа в систему?

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

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

Я бы рекомендовал вам использовать плагин 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top