簡體   English   中英

c#mvc5編輯嵌套集合

[英]c# mvc5 Editing a nested collection

我正在嘗試編輯嵌套集合,並將值發布回服務器。 我不知道這是否可能。

Class1具有Class2的集合

Class2有Class3

Class3具有Class4的集合

Class4具有Class5的集合

我從Nuget安裝了程序包BeginCollectionItem。

我為每個模板創建了編輯器模板。 但是仍然沒有顯示編輯器。

@using (Html.BeginForm("SaveModification","Client", FormMethod.Post, new { @class =     "form-horizontal", role = "form" }))
{    
    @Html.AntiForgeryToken()
    @Html.HiddenFor(o => o.Id)
    <div class="row">
        <div class="col-md-12">
              @using (Html.BeginCollectionItem("Classes2"))
              {
                @Html.EditorFor(x => x.Classes2)
              }                
        </div>
    </div>
    <div class="row">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>    
}

Class2.cshtml
<div class="row">
    @Html.HiddenFor(o => o.Id)
    @Html.EditorFor(model => model.Class3)
</div>

Class3.cshtml
<div class="row">             
   @Html.HiddenFor(o=>o.Id)
    <div class="row">   
        <div class="col-md-10" >@Html.DisplayFor(model => model.Name)</div>
        <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
    </div>
    <div class="row">
    @using (Html.BeginCollectionItem("Classes4"))
    {              
        @Html.EditorFor(x => x.Classes4)
    }
    </div>
</div>

Class4.cshtml
<div class="row">                   
     <div class="col-md-10" style="padding-left:30px;">@Html.DisplayFor(model => model.Name)</div>
    <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
</div>
<div class="row">                                    
@using (Html.BeginCollectionItem("Classes5"))
{          
    @Html.EditorFor(x => x.Classes5)
}          
</div>

Class5.cshtml
 @Html.HiddenFor(model => model.Id)
<div class="row">
    <div class="col-md-10" style="padding-left:50px;">@Html.DisplayFor(model => model.Name)</div>
    <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
</div>

我的問題:使用嵌套的編輯器模板有可能嗎?

更新1:

使用提琴手,我看到我的回應包含我編輯過的值

Id
Classes2.index
Classes2.index
Classes2[311410b2-6ce1-4a09-9979-552720f377fc].Id
Classes2[311410b2-6ce1-4a09-9979-552720f377fc].Class3.Id
Classes2[311410b2-6ce1-4a09-9979-552720f377fc].Class3.Quantity
Class3.index
Class3[7e8b7a76-7000-4ec9-8877-d150ffe25dc5].Classes4.index
Class3[7e8b7a76-7000-4ec9-8877-d150ffe25dc5].Classes4[3315b9ce-989d-4229-92c5-a7ba9955539d].Id
Class3[7e8b7a76-7000-4ec9-8877-d150ffe25dc5].Classes4[3315b9ce-989d-4229-92c5-a7ba9955539d].Quantity
Classes4.index
Classes4[d8990f17-9d9d-4f21-81e2-70c012c48922].Classes5.index
Classes4[d8990f17-9d9d-4f21-81e2-70c012c48922].Classes5[a8afe9a0-b6e0-42b7-85aa-f5bd967dcab6].Id
Classes4[d8990f17-9d9d-4f21-81e2-70c012c48922].Classes5[a8afe9a0-b6e0-42b7-85aa-f5bd967dcab6].Quantity

但是在我的控制器中,viewmodel沒有相同的值,某些集合為null。 我只得到class2和class3值。

BeginCollectionItem應該用於單個集合項,而不是集合級。 此外,如果只想顯示集合而不動態添加和刪除,則不需要它。

在主視圖中,您可以簡單地執行以下操作:

<div class="col-md-12">
    @Html.EditorFor(x => x.Classes2)
</div>

調用EditorTemplate Class2.cshtml Razor將自動在集合上循環並為每個元素渲染模板。

如果需要,可以在Class2.cshtml代碼包裝到以下代碼中:

@using (Html.BeginCollectionItem("Classes2"))
{
    // Your Template code here... 
}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM