2010-11-26 59 views
1

我對web開發(約一個月)非常陌生,我遇到了一些奇怪的事情。MVC 3 Razor動態添加Ajax.Action鏈接只在IE8中第一次工作

我使用VS2010,MVC 3 Razor來創建一個簡單的應用程序。

我有兩個表保存相同類型的信息。正如在表A和表B中持有用戶一樣。區別在於,表A具有處於「角色」中的用戶,而表B具有不在「角色」中的用戶。

兩個表都有兩列,一列用戶名,另一列包含Ajax.ActionLink。

因此,要將用戶添加到表格「B」,我單擊表格「A」上的「Ajax.Actionlink」。通過MVC動作保存「添加」,並使用AjaxOption OnSuccess事件移動表格行。 OnSuccess事件基本上會移動行,並更改Ajax.ActionLink,以便新添加的用戶行的ActionLink將刪除用戶。

我希望這很清楚。

這一切工作正常。我可以將用戶「A」添加到表「A」,並且一切正常。我可以從表「A」中刪除用戶「A」到表「B」,一切都很好。但我無法將用戶A重新添加到表格「A」。 OnSuccess運行,所以行是移動的,但Action事件不會被調用。所以,如果我刷新屏幕,我可以看到這一舉動並未實際發生。如果我從表「B」上的用戶「B」開始,這也是一樣的。此外,頁面刷新(F5)不會修復鏈接,直到我關閉並重新打開頁面爲止。

在HTML中一切看起來不錯,它顯示在狀態欄,當我點擊鏈接,正確的href被調用,但提琴手註冊沒有調用,並且行動不被調用。

我懷疑我有某種綁定的問題,但我迷失在這裏。一切工作正常在Firefox

請幫助。下面的代碼,添加了評論。請記住這樣做的作用是添加和刪除,刪除和添加,但重新添加和重新刪除只調用該函數,但不調用該操作。所以我知道行動拼寫正確等。

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

回答

1

我一直在尋找類似的問題,你有過在這裏找到了一個解決方案:Cache issue with Ajax.ActionLinks 總結:

  • 一項建議是,把這個:$.ajaxSetup({ cache: false });如果 您使用jQuery的不顯眼的JavaScript支持。
  • 另一個建議是在 AjaxOptions中使用"HttpMethod = "POST"

反正希望這可以幫助你或別人,所以我在這裏發佈它。

1

無法弄清楚這一點。所以最後我只是使用了jquery.ajax。