MVC 3 Razor动态添加Ajax.Action Link仅在IE8中首次使用

时间:2010-11-26 16:10:11

标签: ajax asp.net-mvc-3 razor actionlink

我是网络开发的新手(大约一个月),我遇到了一些奇怪的事情。

我正在使用VS2010,MVC 3 Razor来创建一个简单的应用程序。

我有两张表持有相同类型的信息。如同表A和表B中的用户一样。区别在于,表A包含“角色”中的用户,表B包含不在“角色”中的用户。

两个表都有两列,一列是用户名,另一列是Ajax.ActionLink。

因此,要将用户添加到表“B”,我单击表“A”上的“Ajax.Actionlink”。 “添加”通过MVC操作保存,我使用AjaxOption OnSuccess事件移动表行。 OnSuccess事件基本上移动了Row,并改变了Ajax.ActionLink,因此新添加的User行的ActionLink将删除用户。

我希望这很清楚。

一切正常。我可以将用户“A”添加到表“A”,一切正常。我可以将表“A”中的用户“A”删除到表“B”,一切都很好。但我不能将用户A重新添加到表“A”。 OnSuccess运行,因此行移动,但不调用Action事件。因此,如果我刷新屏幕,我可以看到移动实际上没有发生。如果我从表“B”上的用户“B”开始,它是相同的。此外,页面刷新(F5)不会修复链接,在关闭并重新打开页面之前,页面刷新仍然会中断。

HTML中的一切看起来都很好,它在状态栏中显示当我点击链接时,正在调用正确的href,但是fiddler没有注册任何调用,并且没有调用该操作。

我怀疑我有某种约束性问题,但我迷失在这里。一切都在Firefox中运行良好

请帮忙。下面的代码,添加了评论。请记住,这可以添加和删除,删除和添加,但重新添加和重新删除只调用该函数但不调用Action。所以我知道动作拼写正确等等。

//// element is the ID of the element i am Moving
//// targetElement is the ID of the tbody i am moving the element to
function move_element(element, targetElement) {
    try 
    {
       //// get the HTM 
       var elementHTML = $("tr[id=" + element + "]").children(".Action").html();
       //// based on the tbody id
       switch (targetElement) 
       {
       case "AssignedToGroup":
            //// Change the target body for next call to this function
            elementHTML = elementHTML.replace("AssignedToGroup", "UnassignedToGroup");
            //// change th action name
            elementHTML = elementHTML.replace("AddGroupRole", "DeleteGroupRole");
            //// change the display label
            elementHTML = elementHTML.replace("Assign", "Remove");
            break;
       case "UnassignedToGroup":
            elementHTML = elementHTML.replace("UnassignedToGroup", "AssignedToGroup");
            elementHTML = elementHTML.replace("DeleteGroupRole", "AddGroupRole");
            elementHTML = elementHTML.replace("Remove", "Assign");
            break;
     }
     //// Create the new Ajax <td> element
      $("tr[id=" + element + "]").children(".Action").replaceWith("<td  class='Action'>" + elementHTML +  "</td>")
      //// Add the row to the other body
      $("tr[id=" + element + "]").appendTo($("tbody[id=" + targetElement + "]"));
   }
   catch (e) 
   {
     alert(e.Message); ////NO ERROR IS RAISED
   }
}

2 个答案:

答案 0 :(得分:1)

无法弄清楚这一点。所以最后我只使用了jquery.ajax。

答案 1 :(得分:1)

我正在查看您遇到的类似问题,并在此处找到了解决方案:Cache issue with Ajax.ActionLinks 总结一下:

  • 一个建议就是这样称呼:$.ajaxSetup({ cache: false });如果 你正在使用不引人注目的javascript支持jquery。
  • 另一个建议是使用"HttpMethod = "POST" AjaxOptions。

无论如何希望这可以帮助你或其他人,所以我在这里发布了它。