Браузер, запрашивающий загрузку ответа JSON, ASP.NET MVC2 - PullRequest
1 голос
/ 30 июня 2010

Я неожиданно столкнулся с этой проблемой, выполняя простую ajax-отправку формы.JSON возвращается в правильном формате, но браузер предлагает загрузить его.Fiddler показывает тип контента как правильный:

application/json; charset: utf-8

Вот мой JavaScript:

 $("#submitbutton").click(function(e) {
 $.post('FormTest', function(o) {
  FormCallback(o);
  });
}); 

Вот сторона сервера:

public JsonResult FormTest(string test) {
        return Json("This worked!");
    }

Опять получаювернуть объект с сервера нормально, но он либо предлагает мне загрузить (Firefox), либо просто показывает объект на новой вкладке в браузере (Chrome).

Я нашел еще один вопрос, подобный этому, но авторне объяснил, что было не так.Это безумие!Есть идеи?

Редактировать: Ниже приведен правильный код, кроме e.preventDefault, мне также нужно было указать, какие данные формы использовать:

  $("#submit-button").click(function(e) {
    $.post('address', $("#form").serialize(), function(o) {
        FormCallback(o);
    });
   e.preventDefault();
});

Ответы [ 3 ]

2 голосов
/ 30 июня 2010

Вы хотите отменить действие по умолчанию, я ожидаю:

 $("#submitbutton").click(function(e) {
 $.post('FormTest', function(o) {
  FormCallback(o);
  });
  return false; // <<=====
});

Вы также можете попробовать:

e.preventDefault();

, если это не работает само по себе

1 голос
/ 30 июня 2010

MVC 2 возвращает JSON-миметип по умолчанию. Если вы хотите получать данные JSON в простом HTML, вы должны передать свои данные JSON следующим образом:

return Json(model, "text/html", JsonRequestBehavior.AllowGet);

Еще один момент: вы можете пометить свое Действие с помощью [ChildActionOnly] и назвать свое действие таким образом

var json = <%= Html.Action("YourActionMethod", "YourControllerName") %>
1 голос
/ 30 июня 2010

В дополнение к ответу @ Marc я хотел бы добавить следующее:

return Json("This worked!");

на самом деле не работает, так как не возвращает действительный объект JSON. Он просто возвращает "This worked!" клиенту. Вам необходимо построить объект:

return Json(new { Message = "This worked!" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...