Как отправить результат отправки формы AJAX в ASP.Net MVC?
-
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>