2014-01-29 42 views
0

內加載在我看來,我必須把一些渲染部分頁面動態地在一個表(在發票如:產品線)加行ASP.NET MVC局部視圖不相同的觀點

要添加第表我都遵循: http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

我按照鏈接中的指示,但我的主視圖看起來是這樣的:

<table id="editorRows" style="width: 100%;"> 
    <tr> 
    <th>Column1</th> 
    <th>Column2</th> 
    <th>Column3</th> 
    </tr> 

    @foreach (var item in Model.Entity.ListPlans) 
    { 
    Html.RenderPartial("PlanEditorRow", item); 
    } 

</table> 
<b><i>@Html.ActionLink("Add another plan...", "BlankPlanEditorRow", null, new { id = "addItem" })</i></b> 

局部視圖(PlanEditorRow)是:

@model Project.Models.Plan 
@using Project.Helpers 

<tr class="editorRow"> 
@using (Html.BeginCollectionItem("assignedPlans")) 
{ 

    <td> 
     @Html.EditorFor(x => x.Data1) 
    </td> 
    <td> 
     @Html.EditorFor(x => x.Data2) 
    </td> 

    <td> 
     @Html.EditorFor(x => x.Data3) 
    </td> 
    <td> 
     <a href="#" class="deleteRow">delete</a> 
    </td> 
} 
</tr> 

我使用與上面鏈接相同的javascript。單擊添加計劃鏈接時,表格中的計劃編輯器行將在表單中的相同主視圖上正確添加。

但是,當我添加一個類似的第二個表如。改變了renderpartial配置的產品,並且點擊添加鏈接,編輯器行被加載到一個新的頁面上(即僅局部視圖,主視圖不見了)。 我使用了第一個表和相同JS的相同ID和類。

我猜HTML元素ID不能相同,如果是的話我該如何解決它?

如何確保窗體中的任意數量的類似表格,在動態行添加方面與第一個表格一樣正確地起作用?

@克里斯普拉特,我已經使用這個:

$("#addItem").click(function() { 
$.ajax({ 
    url: this.href, 
    cache: false, 
    success: function (html) { $("#editorRows").append(html); } 
}); 
return false; 
}); 

$("a.deleteRow").live("click", function() { 
$(this).parents("tr.editorRow:first").remove(); 
return false; 
}); 

不知道這是否你的意思請求部分在通過AJAX添加HTML是什麼?

回答

0

你可以通過實際使用JavaScript來解決這個問題。你只是鏈接到一個動作,而該動作只返回呈現的部分,這就是爲什麼你會失去一切。您必須通過AJAX請求部分內容,然後將HTML添加到頁面。

+0

好的,我已經添加了JS顯示我認爲你的意思...請讓我知道,否則 – Qwerty

0

不要使用id的,而是使用class來標識對象。 您可以使用一個div包裝既表和鏈接:

<div class="wrapper"> 
    <table class="editorRows"> 
    ... 
    </table> 
    <b><i><a href="" class="addItem"></a></i></b> 
</div> 



$(".wrapper").on("click", ".addItem", function(evt){ 
    var $myTable = $(this).closest(".wrapper").find(".editorRows"); 
    $myTable.find("tbody").append(...); //or whatever you want to do 
}); 

我希望這會幫助你。

相關問題