Ajax.BeginForm возвращает результат и показывает соответствующие данные - PullRequest
2 голосов
/ 21 апреля 2010

У меня есть следующая страница:

<% using (Ajax.BeginForm("AddAnswer","Marketplace",new AjaxOptions() {HttpMethod = "POST" })){ %>

AddAnswer Действие добавляет некоторые данные в БД.Я хочу сделать следующее: когда ответ был успешно добавлен, добавьте #answers div с текущим ответом, переданным контроллеру.Когда ответ не был успешно добавлен в БД - я хотел бы отобразить соответствующую ошибку в #errors div.Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 22 апреля 2010

Вот что я могу предложить:

Контроллер:

[HttpPost]
public ActionResult AddAnswer(string Value)
{
    // TODO: Try to insert the answer value into the database
    // and return a JSON object that contains the attempted value
    // and an error message if necessary
    return Json(new { Answer = Value, ErrorMessage = "" });
}

Вид:

<% using (Ajax.BeginForm("AddAnswer", "Home", 
       new AjaxOptions { HttpMethod = "POST", OnSuccess = "success" })) { %>
    <%= Html.TextBoxFor(x => x.Value) %>
    <input type="submit" value="Add answer" />
<% } %>

<div id="errors"></div>
<div id="answers"></div>

<script type="text/javascript">
    function success(arg) {
        var obj = arg.get_response().get_object();
        // I apologize for the ugliness that follows, I don't know MS Ajax
        // but this might written better:
        if (obj.ErrorMessage === '') {
            var answer = document.createElement('div');
            answer.appendChild(document.createTextNode(obj.Answer));
            document.getElementById('answers').appendChild(answer);
        } else {
            document.getElementById('errors').innerHTML = obj.ErrorMessage;
        }
    }
</script>
0 голосов
/ 01 ноября 2012

Я хотел добавить комментарий к ответу Дарина, но по какой-то причине не могу. По сути, события OnSuccess и OnFailure НЕ проверяют модель, они просто проверяют, что вызов AJAX был успешным, что он поступил на контроллер и вернулся без каких-либо ошибок. Итак, если вы хотите отправить сообщения об ошибках с контроллера, вам нужно сделать это, как сказал Дарин, отправив объект json и обработав его в событии onSuccess. На самом деле вы можете отправить List с ошибками и сгенерировать список HTML в javascript позже, или все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...