代码之家  ›  专栏  ›  技术社区  ›  MunkiPhD

ASP.NET MVC AJAX请求未正确触发

  •  0
  • MunkiPhD  · 技术社区  · 17 年前

    我不明白为什么这个Ajax请求没有正确触发。为了简单起见,我一直尝试使用 this tutorial . 但是,我无法让我的控制器识别请求是这样的。我尝试将ajax.actionLink放在要更新的DIV中(在这里是它的外部)。

    使用response.write放置日期时间,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>
    ...
    

    然后我的行动结果看起来是…

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

    (一切都是默认的,因为这只是一个测试页,一旦我发现了它就可以实现)。因此,我不断地在目标分区内获得完整的视图。

    3 回复  |  直到 17 年前
        1
  •  0
  •   Stephen M. Redd    17 年前

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

    如果是这样,我建议您更新到发布版本,并确保您正在使用最新的jquery和mvc脚本…request.isajaxrequest()方法的工作方式发生了一些特定的变化,这些变化可能与您的问题有关。

    此外,如果其中涉及到RedirectToAction调用,您可能希望阅读有关 similar problem here .

        2
  •  0
  •   Jonathan Parker    17 年前

    我不知道问题出在哪里,但fiddler和routedebugger可能有助于调试它。

        3
  •  0
  •   David Neises    16 年前

    它不会显示在您发布的代码片段中,但您很可能有表单/表单标记。这些干扰了生成表单标记的ajax.begininform。删除外部表单标记后,request.isajaxrequest将返回true。

    推荐文章