/ / MVC3 Ajax.ActionLink bewirkt, dass die Datei geöffnet wird - json, asp.net-mvc-3

MVC3 Ajax.ActionLink verursacht Datei öffnen Dialog - JSON, ASP.net-MVC-3

Ich habe eine Ansicht mit dem folgenden Ajax.ActionLink definiert

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

Hier ist die in meinem Controller definierte Aktion.

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

}

Wenn ich auf den Link auf der Seite klicke, wird ein Beitrag zurückgeschicktzu meiner Aktion in meinem Controller fein, führt den Code aus und gibt das Json-Ergebnis zurück. Sobald der Client das Ergebnis erhält, öffnet der Browser ein Dialogfeld "Speichern unter". Wenn ich die Datei speichere, ist dies mein Json-Ergebnis, das wie erwartet zurückkehrt. Ich weiß nicht, warum meine "pickMade" -Funktion nicht aufgerufen wird, um das Ergebnis des Postbacks zu verarbeiten.

In meiner anderen Anwendung verwende ich dieAttribut [AcceptVerbs (HttpVerbs.Post)]. Wenn ich dies jedoch in dieser Anwendung versuche, erhalte ich eine 404-Fehlermeldung, wenn ich die Aktion aus meiner Sicht aufrufe. Wenn ich das Attribut entferne, muss ich das JsonRequestBehavior.AllowGet zu meinem Rückgabewert hinzufügen.

Ich habe sehr ähnliche Funktionen in einer anderen Anwendung und es funktioniert gut. Ich bin nicht sicher, was los ist, also ist jede Hilfe willkommen.

Antworten:

3 für die Antwort № 1

Du hast 2 Lösungen (denke ich).

Erste Lösung (nicht die beste):

1 / Deaktivieren Sie das unauffällige Javascript in Ihrer Web.config

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

2 / Einschließlich der Skriptdateien MicrosoftAjax.js und 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>

Zweite Lösung (besser):

1 / Lasse das unauffällige Javascript aktiviert (standardmäßig)

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

2 / Fügen Sie die jquery-unauffälligen Javascript-Dateien hinzu.

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

Hatte dieses Problem schon mehrmals und ich habe immer gearbeitet: /!