/ / MVC3 Ajax.ActionLink faz com que o arquivo abra a caixa de diálogo - json, asp.net-mvc-3

MVC3 Ajax.ActionLink faz com que o arquivo abra a caixa de diálogo - json, asp.net-mvc-3

Eu tenho uma visão com o seguinte Ajax.ActionLink definido

@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 });

Aqui está a ação definida no meu controlador.

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);

}

Quando clico no link da página, ele é postado de voltapara minha ação no meu controlador bem, executa o código e retorna o resultado do Json. No entanto, uma vez que o cliente obtém o resultado, o navegador abre uma caixa de diálogo "Salvar como". Se eu salvar o arquivo, é o resultado do meu Json, retornando como esperado. Eu não sei porque minha função "pickMade" não está sendo chamada para lidar com o resultado do postback.

Na minha outra aplicação, eu estou usando oAtributo [AcceptVerbs (HttpVerbs.Post)]. No entanto, se eu tentar isso neste aplicativo, recebo um erro 404 ao chamar a ação da minha visualização. Se eu remover o atributo, tenho que adicionar o JsonRequestBehavior.AllowGet ao meu valor de retorno.

Eu tenho funcionalidade muito semelhante em outro aplicativo e funciona bem. Eu não tenho certeza do que está acontecendo, então qualquer ajuda é apreciada.

Respostas:

3 para resposta № 1

Você tem duas soluções (eu acho).

Primeira solução (não a melhor):

1 / Desativando o Javascript Discreto no seu Web.config

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

2 / Incluindo arquivos de script MicrosoftAjax.js e 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>

Segunda solução (melhor):

1 / Mantenha o Javascript não obstrutivo ativado (por padrão)

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

2 / Incluir os arquivos javascript não-intrusivos de 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>

Já tive esse problema várias vezes e sempre trabalhei: /!