将多个数据从View发布到Controller MVC

时间:2015-01-26 21:12:41

标签: asp.net-mvc

我想将数量属性发布到Controller(这是一个编辑操作)。我正在编辑与我的SQL数据库中的ProductSet连接的OrderedProductSet(我从那里得到名称和价格)。如何将多个数据从视图传递到控制器?如何在控制器类中编写方法来接收数据(我在这个具体情况下询问方法参数)。

我的观点:

@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")
}

我的模特(当然是分开的课程):

 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; }
}

2 个答案:

答案 0 :(得分:0)

您需要在for循环中为您的集合构建控件,或者为EditorTemplate使用custum OrderedProduktSet,以便使用索引器正确命名控件,并且可以在回发时绑定。请注意,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" />
}

控制器(模型将被绑定,包括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" />
}

答案 1 :(得分:-1)

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

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

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

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

访问列表:

使用Viewbag。

控制器

Viewbag.MyList = myList

查看

@foreach (var item in Viewbag.MyList)

以下是更多信息的好链接: http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-a-view