asp.net MVC Ajax请求无法正确解雇

时间:2009-03-26 02:25:35

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

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

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

...
    <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内的完整视图。

3 个答案:

答案 0 :(得分:0)

我不确定问题是什么,但Fiddler和RouteDebugger可能有助于调试它。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

它没有显示在您发布的代码段中,但您很可能拥有表单/表单标记。这些都干扰了生成表单标签的Ajax.BeginForm。删除外部表单标记后,Request.IsAjaxRequest将返回true。