我无法弄清楚为什么这个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内的完整视图。
答案 0 :(得分:0)
我不确定问题是什么,但Fiddler和RouteDebugger可能有助于调试它。
答案 1 :(得分:0)
看起来您可能正在使用旧版本的MVC框架?
如果是这样,我建议更新到发行版并确保您使用的是最新的jquery和mvc脚本......特别是在Request.IsAjaxRequest()方法的工作原理方面有一些变化可能与您的问题有关。
此外,如果涉及RedirectToAction调用,您可能需要了解similar problem here。
答案 2 :(得分:0)
它没有显示在您发布的代码段中,但您很可能拥有表单/表单标记。这些都干扰了生成表单标签的Ajax.BeginForm。删除外部表单标记后,Request.IsAjaxRequest将返回true。