/ / MVC3 Ajax.ActionLink provoca el diálogo de apertura de archivo - json, asp.net-mvc-3

MVC3 Ajax.ActionLink hace que se abra el cuadro de diálogo de archivo - json, asp.net-mvc-3

Tengo una vista con el siguiente 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 });

Aquí está la acción definida en mi 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);

}

Cuando hago clic en el enlace de la página, se vuelve a publicara mi acción en mi controlador bien, ejecuta el código y devuelve el resultado Json. Sin embargo, una vez que el cliente obtiene el resultado, el navegador abre un cuadro de diálogo "Guardar como". Si guardo el archivo, es mi resultado Json, regresando como se esperaba. No sé por qué mi función "pickMade" no está siendo llamada para manejar el resultado de la devolución de datos.

En mi otra aplicación, estoy usando el[AcceptVerbs (HttpVerbs.Post)] atributo. Sin embargo, si intento esto en esta aplicación, obtengo un error 404 al llamar a la acción desde mi punto de vista. Si elimino el atributo, tengo que agregar JsonRequestBehavior.AllowGet a mi valor de retorno.

Tengo una funcionalidad muy similar en otra aplicación y funciona bien. No estoy seguro de lo que está sucediendo, por lo que se agradece cualquier ayuda.

Respuestas

3 para la respuesta № 1

Tienes 2 soluciones (supongo).

Primera solución (no la mejor):

1 / Desactivar el Javascript discreto en su Web.config

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

2 / Incluidos los archivos de script MicrosoftAjax.js y 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 solución (mejor):

1 / Mantenga habilitado el discreto Javascript (por defecto)

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

2 / Incluya los archivos javascript jquery-discreto.

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

Ya tuve este problema varias veces y siempre trabajé: /!