从视图发送列表到控制器MVC的问题

时间:2017-01-12 08:42:34

标签: asp.net-mvc view controller send

我在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**)
{

你能告诉我如何实现这个目标吗? 提前谢谢!

1 个答案:

答案 0 :(得分: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,仍然可以但是如果您不想要的话,您必须将具有与HiddenFileds相同name的子项所需的所有属性传递给控制器以表格形式显示

  

您需要根据您的业务和您的业务更改此代码   属性,但它只是为了表达我的想法。

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