/ / MVC3 Ajax.ActionLink provoque une boîte de dialogue d'ouverture de fichier - json, asp.net-mvc-3

MVC3 Ajax.ActionLink provoque une boîte de dialogue d’ouverture de fichier - json, asp.net-mvc-3

J'ai "une vue avec le Ajax.ActionLink suivant défini

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

Voici l'action définie dans mon contrôleur.

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

}

Lorsque je clique sur le lien sur la page, il revientà mon action dans mon contrôleur, exécute le code et renvoie le résultat Json. Cependant, une fois que le client obtient le résultat, le navigateur ouvre une boîte de dialogue "Enregistrer sous". Si j'enregistre le fichier, c'est mon résultat Json, qui revient comme prévu. Je ne sais pas pourquoi ma fonction "pickMade" n'est pas appelée pour gérer le résultat de la publication.

Dans mon autre application, j'utilise leAttribut [AcceptVerbs (HttpVerbs.Post)]. Cependant, si j'essaye ceci dans cette application, j'obtiens une erreur 404 en appelant l'action de ma vue. Si je supprime l'attribut, je dois ajouter JsonRequestBehavior.AllowGet à ma valeur de retour.

J'ai des fonctionnalités très similaires dans une autre application et cela fonctionne très bien. Je ne sais pas ce qui se passe, donc toute aide est appréciée.

Réponses:

3 pour la réponse № 1

Vous avez 2 solutions (je suppose).

Première solution (pas la meilleure):

1 / Désactiver le Javascript discret dans votre Web.config

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

2 / Y compris les fichiers de script MicrosoftAjax.js et 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>

Deuxième solution (meilleure):

1 / Gardez le Javascript discret activé (par défaut)

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

2 / Inclure les fichiers javascript jquery-unobtrusive.

  <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'ai déjà eu ce problème plusieurs fois et j'ai toujours travaillé: /!