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

Posted

技术标签:

【中文标题】将列表从视图发送到控制器 MVC 的问题【英文标题】:Problems to send a list from view to controller MVC 【发布时间】:2017-01-12 08:42:34 【问题描述】:

我无法在 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 包含每个项目的 Children 列表,您可以在随附的屏幕截图中看到:

这是控制器中的代码:

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**)

您能告诉我如何实现这一目标吗? 提前致谢!

【问题讨论】:

你为什么在 Controller 中使用 TempData 而在 View 中你使用的是 ViewBag? TempData 仅用于测试 你为什么不为此创建 viewmodel 包含选定、id、类别和类别列表,而不是将其传递给视图而不是使用 viewbag @Orsi 你能检查答案并告诉我这是否解决了你的问题吗? 当然,我会检查,我会回来回答。谢谢! 【参考方案1】:

在模型中添加您想要的表单并提交此模型,您必须在视图中将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/

【讨论】:

我按照您的建议制作了视图模型,现在我将一个列表传递给视图。您能否再提出一个问题。将隐藏字段发送到控制器的最佳方式是什么? @Orsi 如果您在表单中添加这些字段并提交表单,它将发送给控制器public ActionResult SubCategory(MyModel model) 我在新答案中添加了我的问题 我按照您的建议尝试将模型发送到控制器,但模型始终为空。我在答案中粘贴了代码。你知道是什么问题吗?

以上是关于将列表从视图发送到控制器 MVC 的问题的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值

无法将数据从视图发送到控制器 Action .NET MVC

无法使用 Jquery 将数据从视图发送到控制器 Asp.net MVC

如何使用 Ajax 以数组格式将多个图像从 MVC 视图发送到控制器?

如何将项目列表从视图传递到控制器(ASP.NET MVC 4)

模型视图控制器:将定期显示的信息从控制器发送到视图