2017-01-12 36 views
0

我有問題在MVC中發送一個從視圖到控制器的列表。從視圖發送一個列表到控制器的問題MVC

這是鑑於代碼:

foreach (var c in ViewBag.Categories) 
{ 
    <a href="@Url.Action("SubCategory", "Product", new { selected = selected, id = @c.Item.ID, category = @c.Item.Name })" id="link" class="list-group-item"> 
    <span> @c.Item.Name</span> 
    </a> 
// { TempData["Childrens"] = c.Children; } 

}

的ViewBag.Categories包含兒童名單的每個項目,你可以在所附截圖中看到: enter image description here

這是控制器中的代碼:

public ActionResult SubCategory(string selected, int id, string category) 
{ 
     var childrens = TempData["Childrens"] as IEnumerable<Helpers.TreeItem<Categories>>; 
     var listOfChildrens = childrens.ToList(); 

    } 

我需要在ActionResult的參數列表,孩子列表中,這樣的事情:

public ActionResult SubCategory(string selected, int id, string category, **childrens**) 
{ 

能否請您指點我如何實現這一目標? 在此先感謝!

+0

爲什麼你在使用控制器和TempData的在查看你使用ViewBag? –

+0

TempData僅用於測試 – Orsi

+0

爲什麼不創建** viewmodel **爲這包含選定的,id,類別和categorylist,並傳遞它來查看,而不是使用viewbag – Curiousdev

回答

0

在模型中添加你想要的表格並提交此模型,並且您必須在您的視圖中將Childrens呈現爲Hidden fields,因此當您提交Controller時可以匹配它們。

public Class MyModel { 
    public string selected {get;set;} 
    public int id {get;set;} 
    public string category {get;set;} 
    public List<Children> childrens {get;set;} 
} 



for (int i= 0; i< Model.Categories.Count; i++) 
{ 
    .... 
    @Html.HiddenFor(x=> Model.childrens[i].Yourproperty1) 
    @Html.HiddenFor(x=> Model.childrens[i].Yourproperty2) 
    .... 
} 

如果你不想創建一個模型,並保持處理Viewbag,仍然可能的,但你必須傳遞給控制器​​,你從兒童需要使用相同的name,如果你不想HiddenFileds所有屬性將其顯示在您的表單中

您需要根據您的業務和 屬性更改此代碼,但它僅用於介紹我的想法。

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

+0

我按照您的建議製作了viewmodel,現在我將一個列表傳遞給視圖。你能否提出另一個問題的建議?將隱藏字段發送給控制器的最佳方式是什麼? – Orsi

+1

@Orsi如果您在表單中添加這些字段並提交表單,它將發送到控制器 '公共ActionResult子類別(MyModel模型)' –

+0

我在一個新的答案中添加了我的問題 – Orsi

相關問題