2011-12-22 33 views
0

我在我的應用程序中有3個視圖(1主,1部分,1嵌套部分),我用來調用部分(從主)和嵌套部分(從部分)在主視圖中使用一次又一次
嵌套的Ajax.Actionlink(InsertionMode.insert引起一些混亂)

  • ActionLink的


    此ActionLink的的流程::當我再次和agai點擊此鏈接( N)然後新partail視圖(createPackage)之後ID = 「newPackage」 加在每點擊

  • ActionLink的二手createPackage局部視圖(視圖點擊後呈現在鏈路從主視圖)

    <div id="newCheck"> 
        @Ajax.ActionLink("add Checks", "addAnotherCheck", new AjaxOptions { InsertionMode = InsertionMode.InsertAfter, UpdateTargetId = "newCheck" })<br/><br/></div> 
    
    內部


    的這種流動ActionLink的 ::當我點擊這個鏈接(一遍又一遍),那麼新的嵌套partail視圖(addAnotherCheck)之後ID =「newPackage補充說:」在每一次點擊

    我。 e主要目標是創建多個包,每個包包含多個檢查
    完成所有工作(我的所有工作都已完成,並且我的應用程序(ASP> NET MVC3)工作正常)
    問題是(僅限於)當我嘗試創建多個包與多個檢查,然後點擊「添加檢查」鏈接從package2,3..n視圖(嵌套部分)(不包括1)另一個「addAnotherCheck」嵌套視圖後附加package1「添加檢查」鏈接
    但我需要它在調用「添加檢查」後追加
    在nutt shell中 ::一次又一次調用嵌套局部變量(從部分(即,我再次調用主視圖))ajax.actionlink(with insertionmode.InsertAfter)即只將嵌套部分插入到第1部分。

回答

0

InsertionMode = InsertionMode.InsertAfter正在查找HTML元素ID。這些應該在您的網頁上唯一。一旦添加了「newCheck」ID,MVC Ajax就會找到第一個。你真正需要做的是在最後放置一個佔位符並使用InsertionMode.InsertBefore。所以你的看法是這樣的:

<div id="newPackage">... 
<div id="newCheck" /> 

然後從你的局部視圖中刪除id =「newCheck」。現在,您的部分視圖中的標記始終會放在div上方,並且newCheck ID始終位於頁面的底部。

你resutling HTML應該somethig這樣的:

<div id="newPackage">... 
<div> @Ajax.ActionLink("add Checks", "addAnotherCheck", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, UpdateTargetId = "newCheck" })<br/><br/></div> 
<div> @Ajax.ActionLink("add Checks", "addAnotherCheck", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, UpdateTargetId = "newCheck" })<br/><br/></div> 
<div> @Ajax.ActionLink("add Checks", "addAnotherCheck", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, UpdateTargetId = "newCheck" })<br/><br/></div> 
<div> @Ajax.ActionLink("add Checks", "addAnotherCheck", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, UpdateTargetId = "newCheck" })<br/><br/></div> 
<div id="newCheck" /> 

這應該工作,現在你不會在你的HTML更多重複的ID兩種。

0

問題是您的代碼插入了多個具有相同ID的div:您的部分視圖始終添加<div id='newCheck'>...</div>,因此頁面最終會填滿具有相同ID的div。

  • 首先,這是不合法的。一個HTML文檔不應該有多個具有相同ID的元素。
  • 其次,當您單擊"addAnotherCheck"時,僅找到包含UpdateTargetId的第一個元素(因爲它應該只是具有相同ID的一個元素)。所以檢查總是插在第一個之後。由於這是不允許的,每個瀏覽器都可以做不同的事情。

因此,只要您在同一頁面中呈現相同的部分,就應該更改ID。您可以簡單地在ID後添加隨機數,並使用相同的ID作爲div和UpdateTargetId。可以安全使用的顯而易見的隨機事件是Guid。對於這種情況,時間戳也可以工作。