【问题标题】:MVC3 Ajax.ActionLink causes file open dialogMVC3 Ajax.ActionLink 导致文件打开对话框
【发布时间】:2011-09-26 17:41:42
【问题描述】:

我有一个定义了以下 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 添加到我的返回值中。

我在另一个应用程序中具有非常相似的功能,并且运行良好。我不确定发生了什么事,因此感谢您的帮助。

【问题讨论】:

    标签: json asp.net-mvc-3


    【解决方案1】:

    你有 2 个解决方案(我猜)。

    第一个解决方案(不是最好的):

    1/ 在您的 Web.config 中停用 Unobtrusive Javascript

    <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/ 包含 jquery-unobtrusive javascript 文件。

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

    已经多次遇到这个问题,我一直在工作:/!

    【讨论】:

    • 我只需要 jquery.validate.unobtrusive.js。一旦我添加它开始工作。你刚刚缓解了我变得非常严重的头痛。谢谢一百万!
    猜你喜欢
    • 2012-03-25
    • 2010-12-11
    • 1970-01-01
    • 2013-05-12
    • 2022-01-23
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多