ASP.NET MVC: лучший способ вернуть тип в AjaxRequest? - PullRequest
3 голосов
/ 15 января 2010

У меня есть несколько ActionResults в моем контроллере. Почти все они обрабатывают AjaxRequest и обычные запросы, в зависимости от запроса (да!). Дело в том, что если я добавляю что-то в базу данных с помощью AjaxRequest, я просто хочу вернуть OK или ERROR (или 1 или 0 и т. Д.) На мою страницу вместо View () или ParcialView () потому что я буду обрабатывать через ajax на клиенте, и мне просто нужен ответ да или нет (или любой другой базовый ответ).

Если у меня обычный запрос (не ajax), это нормально, потому что я либо перенаправлю на другой контроллер, либо верну простой View ().

Итак, вопрос в том, каков наилучший способ вернуть простое значение моему представлению при обработке AjaxRequest () ??

// logic to insert into the db (just an example)
result = Person.Add();

if(Request.IsAjaxRequest()) {

   if(result == ok)
      return true;
   else
      return false;
 }
 // Normal Request
 else {

   if(result == ok)
      return Redirect("PersonList");
   else
      return View("Error:);
 }

Ответы [ 3 ]

4 голосов
/ 15 января 2010

Чтобы вернуть обычный текст в представление:

return Content("ok");

Или используйте JSON альтернативно:

return Json(new { result = true });

UPDATE:

jQuery автоматически обнаружит, что сервер отправляет ответ JSON, и передаст обратному вызову success объект, который будет содержать сериализированные свойства:

$.ajax({ 
    type: "POST", 
    data: theForm.serialize(), 
    url: theForm.attr('action'), 
    success: function(json) { 
        alert(json.result); // result is the property name used in the controller
    },
    error: function() { 
        alert('Error!'); 
    } 
});
0 голосов
/ 16 января 2010

Я нашел проблему. JQuery не определяет автоматически тип возвращаемого значения, поэтому вам нужно указать его, используя свойство dataType. Посмотрите на код ниже. Работало отлично! Спасибо вам всем.

 $.ajax({
         type: "POST",
         data: theForm.serialize(),
         url: theForm.attr("action"),
         dataType: "json", // Choose the return type - json
         success: function(json) {
              alert(json.returnCode);
         },
         error: function() {
              alert('Error!');
         }
       });
0 голосов
/ 15 января 2010

Если это стандартное поведение во всем приложении, возможно, вы захотите создать ActionFilter, инкапсулирующий вашу логику ajax.

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