我正在上这些课程:
public class ProductViewModel
{
public IEnumerable<Product> Products { get; set; }
}
public class Product
{
public int ArticeNr { get; set; }
public string Name { get; set; }
}
这个观点
@model ProductsViewModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<table class="table">
@foreach (var item in Model.Products) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ArticleNr)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
</tr>
}
</table>
<input type="submit" value="submit" name="submitButton" />
}
如何将Model.Products中的所有值传递给Controller?我希望foreach-loop中的所有值都发送到控制器
我的控制器将ProductsViewModel作为参数。但是我在model.Products
中发布后的值为空。
public ActionResult Index(ProductsViewModel model) //here, model.Products is always null after post
{
//LOGIC
}
答案 0 :(得分:0)
这里我将介绍如何使用示例应用程序在ASP.Net MVC 3中发布集合。发布(将HTML字段值从视图传递到控制器)背后的基本思想是通过将呈现的HTML控件的名称字段与Controller的操作方法中的接收参数进行匹配。 ASP.Net MVC - How to Post a Collection
答案 1 :(得分:0)
我认为你没有在foreach循环中修改你的值 - 所以你要回发你的视图收到的相同值以供显示。在这种情况下,保持模型类不变,但按如下所示更改索引视图和主控制器
视图:
@model Models.ProductViewModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<table class="table">
@foreach (var item in Model.Products)
{
<tr>
<td>
@item.ArticleNr
</td>
<td>
@item.Name
</td>
</tr>
}
</table>
<input type="submit" value="submit" />
}
控制器:
[HttpGet]
public ActionResult Index()
{
return View(new ProductViewModel()); // this model contains products you want to display
}
[HttpPost]
public ActionResult Index(ProductViewModel model)
{
// do smth with your model here
return View();
}
我怀疑你的问题是你的行为没有属性[HttpGet]和[HttpPost]
的结果答案 2 :(得分:0)
@ Html.DisplayFor只显示视图中的值。
如果你希望在帖子上将值传递回控制器,那么你还需要一个@ Html.HiddenFor