将列表从视图发送到控制器 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 视图发送到控制器?