【问题标题】:asp.net MVC Ajax Request Not Firing Correctlyasp.net MVC Ajax 请求未正确触发
【发布时间】:2009-03-26 02:25:34
【问题描述】:

我无法弄清楚为什么这个 Ajax 请求没有正确触发。为简单起见,我一直在尝试使用this tutorial 来实现 Ajax 请求。但是,我无法让我的控制器将请求识别为如此。我已经尝试将 Ajax.ActionLink 放置在要更新的 div 中(在此之外)。

使用 Response.Write 放置 Datetime,Div 内的时间会更新,而目标 div 外的时间不会(如预期的那样)。我不太熟悉 MS Ajax 库的工作原理,但从表面上看,它似乎正在更新页面的正确部分,但我的控制器无法识别请求类型,因此输出了不正确的信息。

...
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.2.6.min.js" type="text/javascript"></script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="chart" id="divChart">
        <% Html.RenderPartial("GraphView", Model); %>
        <br />
        <% Response.Write(DateTime.Now); %>
        <br />
    </div>
    <%= Ajax.ActionLink("no parameters", "MyWorkouts", new AjaxOptions{ UpdateTargetId = "divChart"}) %>
    <%= Ajax.ActionLink("id parameter", "MyWorkouts", new {chtype=1},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%>
    <%= Ajax.ActionLink("all parameters", "MyWorkouts", new {chtype=2, range=ViewData["daterangevalue"]},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%>
    <br />
    <% Response.Write(DateTime.Now); %>
    <h2>
...

然后我的 ActionResult 看起来像这样......

[AcceptVerbs(HttpVerbs.Get)]
        public ActionResult MyWorkouts(int? chtype, int? range) {
            int dateRange = 3;

             // do some stuff here - left out for readability

            if (Request.IsAjaxRequest()) {
                if (range != null) {
                    dateRange = (int)range;
                }

            }

           //do some other stuff...

            if (Request.IsAjaxRequest()) {
                return PartialView("GraphView", workouts);
            } else {
                return View(workouts);
            }
        }

(一切都是默认的,因为这只是一个测试页面,一旦我弄清楚了就可以实现它)。结果,我不断获得目标 div 内的完整视图。

【问题讨论】:

    标签: asp.net-mvc ajax model-view-controller


    【解决方案1】:

    看起来您可能使用的是旧版本的 MVC 框架?

    如果是这样,我建议更新到发布版本并确保您使用的是最新的 jquery 和 mvc 脚本... Request.IsAjaxRequest() 方法的工作方式有一些具体的变化,可能与您的问题有关。

    此外,如果其中涉及 RedirectToAction 调用,您可能需要了解similar problem here

    【讨论】:

    • 我相信我的开发机器上安装了 RC1(我知道我还没有更新到 RC2)。此外,省略的代码中根本没有 RedirectToActions 或任何重定向类型的行为,只是一些服务层调用。
    【解决方案2】:

    我不确定问题出在哪里,但 Fiddler 和 RouteDebugger 可能有助于调试它。

    【讨论】:

    • 我不认为这是一个路由问题,因为它到达了正确的控制器——它只是没有将请求识别为 Ajax 请求。我必须尝试 Fiddler,但我一直在使用 Firebug,但一无所获。
    【解决方案3】:

    它不会显示在您发布的 sn-p 中,但您很可能有 form /form 标签。这些干扰了生成表单标签的 Ajax.BeginForm。删除外部表单标签后,Request.IsAjaxRequest 将返回 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      相关资源
      最近更新 更多