Используйте разные updatetargetid в зависимости от вида - PullRequest
4 голосов
/ 29 мая 2009

У меня есть веб-страница, которая отображает список элементов в таблице HTML. Над списком находится форма, которая позволяет пользователю добавлять новый элемент в список через AJAX (используя Ajax.BeginForm). Когда данные отправляются в контроллер через AJAX, я добавляю новый элемент в бэкэнд базы данных и генерирую новую строку таблицы через частичное представление, которое затем добавляется к существующей таблице.

Однако, если форма для добавления новых элементов содержит ошибки, я хочу вернуть ее обратно в веб-браузер и отобразить ее.

Так вот в чем вопрос: можно ли указать UpdateTargetId из контроллера? В настоящий момент любой вид, который я возвращаю из контроллера, вставляется в одну и ту же цель, но я хотел бы обновить другую цель (т.е. другой UpdateTargetId) в зависимости от того, какое представление было возвращено из контроллера.

Ответы [ 3 ]

5 голосов
/ 13 июля 2010

Я думаю, что в качестве обходного пути можно использовать JSON и проверить результат в функции обратного вызова. Вот как это будет выглядеть:

function handleAjax(response) {

            var result = response.get_response().get_object();
            var isSuccess = result[0].isSuccess;
            if(isSuccess = "true")
            {
               $("#resultdiv").html(result[0].html);
            }
            else
            {
                $("#formdiv").html(result[0].html);
            } 

        }

В своем действии вы можете написать что-то вроде:

public ActionResult SaveRecord(Entity entity)
{
   if(ModelState.IsValid(){
   return Json(new{isSuccess = true, html = PartialView("RowViewName")}); 
   }
   else
  {
     return json (new{isSuccess = false, html = PartialView("FormViewName")})
  }
}

Я только что столкнулся с той же проблемой сегодня и не смог найти "законный" способ сделать это. Я думаю, что этот простой обходной путь должен сделать это. На данный момент код полностью не проверен.

Прочтите это сообщение в блоге для альтернативного решения.

0 голосов
/ 01 июня 2009

В основном вы хотите вернуть 2 разных результата в зависимости от определенных условий во время выполнения запроса AJAX. К сожалению, это невозможно с реальной реализацией AjaxForm. Вы можете обновить только один регион вашей формы.

Возможным решением этой проблемы может быть создание частичного представления с формой для обновления и возврата частичного представления из контроллера, затем вы создаете новую строку в таблице с простым старым javascript для события onSuccess.

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

Я думаю, что другой идеей может быть перенаправление на сервере на другой контроллер / действие с помощью

RedirectToAction(new {controller="home", action="index", id=931,variable="abc"});

поэтому, если форма содержит ошибку RedirectToAction ..., которая даже может содержать другой PartialView, который может быть помещен в другой DIV ...

просто мысль ...

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