Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将多个数据从视图发布到控制器MVC_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 将多个数据从视图发布到控制器MVC

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

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

我的看法是:

@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
中使用custum
EditorTemplate
,以便使用索引器正确命名控件,并可以在回发时绑定控件。注意
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" />
}