MVC3 Ajax.ActionLink вызывает диалог открытия файла - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть представление со следующим определенным Ajax.ActionLink

@Ajax.ActionLink(@Model.Game.VisitorTeam.FullName, "SelectTeam", new { gameID = @Model.Game.GameID, pickID = @Model.Game.VisitorTeam.TeamID }, new AjaxOptions { HttpMethod = "POST", OnSuccess = "pickMade" }, new { id = "vpick-" + @Model.Game.GameID });

Вот действие, определенное в моем контроллере.

public JsonResult SelectTeam(int gameID, int pickID) {
    var user = Membership.GetUser(User.Identity.Name);
    var message = "Pick Submitted";
    var userID = (Guid) user.ProviderUserKey;
    _pickService.SubmitPick(userID, gameID, pickID);

    return Json(new {id = gameID, teamID = pickID, message}, JsonRequestBehavior.AllowGet);

 }

Когда я нажимаю ссылку настраница, он отправляет обратно в мой Action в моем контроллере нормально, выполняет код и возвращает результат Json.Однако, как только клиент получает результат, браузер открывает диалоговое окно «Сохранить как».Если я сохраню файл, это будет мой результат Json, который вернется, как и ожидалось.Я не знаю, почему моя функция «pickMade» не вызывается для обработки результата обратной передачи.

В моем другом приложении я использую атрибут [AcceptVerbs (HttpVerbs.Post)].Однако, если я попробую это в этом приложении, я получу ошибку 404 при вызове действия с моей точки зрения.Если я удаляю атрибут, я должен добавить JsonRequestBehavior.AllowGet к своему возвращаемому значению.

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

1 Ответ

3 голосов
/ 26 сентября 2011

У вас есть 2 решения (наверное).

Первое решение (не самое лучшее):

1 / Деактивация ненавязчивого Javascript в вашем Web.config

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="false" />
</appSettings>

2 / Включая файлы сценариев MicrosoftAjax.js и MicrosoftMvcAjax.js

<script src="@Url.Content("~/Scripts/MicrosoftAjax.debug.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js")" type="text/javascript"></script>

Второе решение (лучше):

1 / Оставьте ненавязчивый Javascript включенным (по умолчанию)

  <appSettings>
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

2 / Включите ненавязчивые файлы javascript jquery.

  <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

Эта проблема уже возникала несколько раз, и я всегда работал: /!

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