传递@ Html.DisplayFor() - 从视图到控制器的值

时间:2014-08-29 07:03:20

标签: c# asp.net-mvc asp.net-mvc-5

我正在上这些课程:

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
        }

3 个答案:

答案 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