Asp.net mvc 将多个数据从视图发布到控制器MVC
我想将quantity属性发布到控制器(这是一个编辑操作)。我正在编辑OrderedProductSet,它与我的SQL数据库中的ProductSet连接(我从那里得到名称和价格)。如何将多个数据从视图传递到控制器?如何在控制器类中编写方法来接收数据(在这个特定的例子中,我询问的是方法参数) 我的看法是:Asp.net mvc 将多个数据从视图发布到控制器MVC,asp.net-mvc,Asp.net Mvc,我想将quantity属性发布到控制器(这是一个编辑操作)。我正在编辑OrderedProductSet,它与我的SQL数据库中的ProductSet连接(我从那里得到名称和价格)。如何将多个数据从视图传递到控制器?如何在控制器类中编写方法来接收数据(在这个特定的例子中,我询问的是方法参数) 我的看法是: @model Shop.Models.ProductViewModel@{ ViewBag.Title = "Edycja zamówienia"; } <h2>Edycja
@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")
}
@model Shop.Models.ProductViewModel@{
ViewBag.Title=“Edycja zamówienia”;
}
Edycja zamówienie
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
纳兹瓦·普罗杜克图
塞纳
伊洛舍维奇
@foreach(Model.orderedProductSet中的变量项)
{
@DisplayFor(modeleItem=>item.ProduktSet.name)
@DisplayFor(modeleItem=>item.ProduktSet.price)
@EditorFor(model=>item.quantity,new{htmlAttributes=new{@class=“form control”}})
}
}
@ActionLink(“Powrót”,“Index”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}
我的模型(当然是分班):
公共类ProductViewModel
{
公共医嘱集医嘱集{get;set;}
公共IEnumerable orderedProduktSet{get;set;}
}
公共部分类OrderedProduktSet
{
public int orderNumber{get;set;}
public int productNumber{get;set;}
公共int ilosc{get;set;}
公共虚拟ProduktSet ProduktSet{get;set;}
公共虚拟医嘱集医嘱集{get;set;}
}
Viewbag是您在这里的朋友。在MVC中,您通常将数据从视图传递到控制器。您可以访问视图中控制器中Viewbag中的数据集
让控制器处理视图的最简单方法是在控制器中创建与视图同名的actionresult方法
例如,您的视图称为索引,因此在控制器中可以使用以下方法来处理视图数据:
public ActionResult Index()
{
return View();
}
访问列表:
使用可视包
控制器
Viewbag.MyList = myList
看法
以下是有关更多信息的好链接:
您需要在
for
循环中为您的集合构造控件,或者在OrderedProduktSet
中使用custumEditorTemplate
,以便使用索引器正确命名控件,并可以在回发时绑定控件。注意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" />
}
或者,您可以创建一个编辑器或模板
/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" />
}
@model Shop.Models.ProductViewModel
@使用(Html.BeginForm())
{
....
@EditorFor(m=>m.orderedProductSet)
}
您应该更改问题的措辞。从技术上讲,视图从不向控制器发送数据(以这种方式)。它可能已经准备好了如何将多个数据点发布到控制器方法@ErikPhilips更改了它,谢谢!我知道我应该使用ActionResult方法。但在这种特定情况下,我的方法参数是什么?我考虑过公共操作结果编辑(IENumberable list)
但是list
当时是空的。我真的可以只使用Viewbag传递所有数据吗?这不是一个单一的价值观,而是要通过的多个价值观。我已经给了你上面的答案——为投票否决我而欢呼。不使用可视包。Viewbag.List=MyList(在您的控制器中)然后,Viewbag.MyList中的@foreach var项在您的viewOP中没有向下投票,我没有。这与问题(如何在控制器类中编写方法以接收数据)无关,是错误的代码。OP已具有具有集合的模型。然后将其指定给ViewBag有什么意义?。如果您这样做了,则无法将其绑定到post back上的模型。而且无论如何,您都不能使用foreach
循环进行绑定-它不能使用索引器正确命名控件!)。而且ViewBag
永远不是你的朋友!第二种选择很有魅力!现在一直在使用EditorTemplates。
public ActionResult Edit(ProductViewModel model)
{
....
}
@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" />
}