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"/> 

愚蠢的错误,但解决方案并不明显考虑症状。

+0

这正是我所需要的。我花了几个小时弄这个,直到我在这里看到你的帖子。谢谢! – Baxter 2014-07-23 03:57:21