Post 从视图到控制器 MVC 的多个数据

Post Multiple Data from View to Controller MVC

我想 post 数量 属性 到 Controller(这是一个编辑操作)。我正在编辑与我的 SQL 数据库中的 ProductSet 相关联的 OrderedProductSet(我从那里获取名称和价格)。如何将多个数据从视图传递到控制器?如何在控制器 class 中编写方法来接收数据(我在询问这种特定情况下的方法参数)。

我的看法:

@model Shop.Models.ProductViewModel@{
ViewBag.Title = "Edycja zamówienia";
 }

<h2>Edycja zamówienie</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="table">
    <tr>
        <th>
            <b>Nazwa produktu</b>
        </th>
        <th>
            <b>Cena</b>
        </th>
        <th>
            <b>Ilość</b>
        </th>

        <th></th>
    </tr>

    @foreach (var item in Model.orderedProductSet)
    {
        <tr>

            <td>
                @Html.DisplayFor(modelItem => item.ProduktSet.name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ProduktSet.price)
            </td>

            <td>
                @Html.EditorFor(model => item.quantity, new { htmlAttributes = new { @class = "form-control" } })
            </td>
        </tr>
    }

</table>


<div class="form-group">
<div class="col-md-offset-2 col-md-10">
    <input type="submit" value="Potwierdź zmiany" class="btn btn-default" />
</div>
</div>
}



<div>
@Html.ActionLink("Powrót", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

我的模型(当然是分开的 classes):

 public class ProductViewModel
{
     public OrderSet orderSet { get; set; }
     public IEnumerable<OrderedProductSet> orderedProduktSet { get; set; }
}


public partial class OrderedProduktSet
{
    public int orderNumber{ get; set; }
    public int productNumber { get; set; }
    public int ilosc { get; set; }

    public virtual ProduktSet ProduktSet { get; set; }
    public virtual OrderSet OrderSet { get; set; }
}

Viewbag 是您的朋友。您通常将数据从 View 传递到 MVC 中的 Controller。您可以在 View 的控制器中访问 Viewbag 中的数据集。

让控制器处理视图的最简单方法是在控制器中创建一个与视图同名的 actionresult 方法。

例如,您的视图名为 Index,因此您可以在控制器中使用以下方法来处理视图数据:

public ActionResult Index()    
{
    return View();
}

正在访问列表:

使用 Viewbag。

控制器

Viewbag.MyList = myList

查看

@foreach (var item in Viewbag.MyList)

这里很好 link 了解更多信息: http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-a-view

您需要在 for 循环中为您的集合构建控件,或为 OrderedProduktSet 使用自定义 EditorTemplate 以便控件使用索引器正确命名并可以绑定post回来了。请注意 for 循环方法要求集合为 IList.

@model Shop.Models.ProductViewModel
@using(Html.BeginForm())
{
  ....
  for(int i = 0; i < Model.orderedProductSet.Count; i++)
  {
    @Html.DisplayFor(m => m.orderedProductSet[i].ProduktSet.name)
    ....
    @Html.EditorFor(m => m.orderedProductSet[i].quantity, new { htmlAttributes = new { @class = "form-control" } })
  }
  <input type="submit" />
}

Controller(会绑定模型,包括OrderedProductSet的集合)

public ActionResult Edit(ProductViewModel model)
{
  ....
}

或者,您可以创建一个 EditorTemplate

/Views/Shared/EditorTemplates/OrderedProduktSet.cshtml

@model OrderedProduktSet
@Html.DisplayFor(m => m.ProduktSet.name)
@Html.EditorFor(m => m.quantity, new { htmlAttributes = new { @class = "form-control" } })

并在主视图中

@model Shop.Models.ProductViewModel
@using(Html.BeginForm())
{
  ....
  @Html.EditorFor(m => m.orderedProductSet)
  <input type="submit" />
}