Asp.Net MVC Ajax.ActionLink的行为与使用内置的VS2008开发服务器向IIS托管时的行为不同
问题描述:
这是一个非常奇怪的问题。我开发了一个小型MVC应用程序,并使用内置的开发服务器中的VS2008完成了测试,并且所有功能都符合我的预期。我现在已将解决方案移至IIS托管的位置,并在使用Ajax.ActionLink的视图中看到不同的结果。Asp.Net MVC Ajax.ActionLink的行为与使用内置的VS2008开发服务器向IIS托管时的行为不同
actionlink链接到一个控制器动作,它返回一个局部视图(.ascx)。在链接的AjaxOptions中,我指定了希望动作返回的部分视图替换的DOM元素的UpdateTargetId。使用内置开发服务器运行应用程序时,行为与预期的一样 - > ajax调用成功返回partialview并替换指定的DOM元素。但是,当托管在IIS中时,控制器操作已成功执行,但结果会呈现在新页面上,而不是替换指定的DOM元素。
这里是页面,这使得Ajax调用相关来源:
<% if (info.CurrentStatus != OrderStatus.Received &&
info.CurrentStatus != OrderStatus.Processing)
{ %>
<td><%= Ajax.ActionLink("Reprocess Order", "Reprocess",
new { generatedId = info.GeneratedId },
new AjaxOptions
{
UpdateTargetId = "success" + info.GeneratedId,
OnSuccess = "reprocessSuccess"
})%></td>
<% } %>
<td><%= Html.Div("success" + info.GeneratedId) %> </td>
这里是它提供了局部视图的操作:
[RequiresSearch()]
public ActionResult Reprocess(string generatedId)
{
if (RequestReprocessingOfOrder(generatedId))
{
ViewData["reprocessSuccess"] = "Reprocessing request successful. Order is queued for reprocessing";
}
else
{
ViewData["reprocessSuccess"] = "Reprocessing request failed. Please contact the administrator";
}
return PartialView();
}
任何帮助将不胜感激! !
编辑:我没有很多mvc/ajax的经验,所以我不确定在哪里事件开始尝试和解决这个问题,所以即使是寻找什么的指针也会很棒。
答
好吧,所以我已经解决了这个问题,原来是由我用于视图所需的脚本(在本例中为MicrosoftAjax.js和MicrosoftMvcAjax.js)的src引用引起的。我使用的路径在IIS中托管时不再有效,因此动态生成路径可解决问题。
替换:
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"/>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"/>
有了:
<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js")%>" type="text/javascript"/>
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js")%>" type="text/javascript"/>
愚蠢的错误,但解决方案并不明显考虑症状。
这正是我所需要的。我花了几个小时弄这个,直到我在这里看到你的帖子。谢谢! – Baxter 2014-07-23 03:57:21