我正在尝试制作一个股票申请,我的观点用一个编辑器加载我的所有股票。 我的控制器没有从视图中获取任何数据?
我希望能够同时编辑我的所有股票吗? 我怎么能这样做
型号代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace FlatSystem.Models
{
public class Stock
{
public int ID { get; set; }
public string Item_Name { get; set; }
public int Actual_Stock { get; set; }
public int Wanted_Stock { get; set; }
}
}
查看代码
@model IEnumerable<FlatSystem.Models.Stock>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="sidemenu">
<div class="sidemenu-heading">
ReStock
</div>
<div class="div-body">
<table>
<tr>
<th>
Item Name
</th>
<th>
Wanted Stock
</th>
<th>
Stock On Hand
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Item_Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Wanted_Stock)
</td>
<td>
<div class="editor-field">
@Html.EditorFor(modelItem => item.Actual_Stock)
@Html.ValidationMessageFor(modelItem => item.Actual_Stock)
</div>
</td>
@Html.HiddenFor(modelItem => item.ID)
</tr>
}
</table>
</div>
</div>
<input type="submit" value="Submit" />
}
控制器代码
[HttpPost]
public ActionResult ReStock(List<Stock> stock)
{
foreach (var item in stock)
{
if (ModelState.IsValid)
{
GR.InsertOrUpdate(item);
}
}
GR.Save();
return RedirectToAction("Restock");
}
答案 0 :(得分:4)
没有模型类很难回答你的问题,但想法是你的编辑inputs
必须包含name attribute
中的索引。
这样的事情:
@for(int i = 0: i < Model.Count(); i++)
{
<tr>
<td>
@Html.DisplayFor(modelItem => Model[i].Item_Name)
</td>
<td>
@Html.DisplayFor(modelItem => Model[i].Wanted_Stock)
</td>
<td>
<div class="editor-field">
@Html.EditorFor(modelItem => Model[i].Actual_Stock)
@Html.ValidationMessageFor(modelItem => Model[i].Actual_Stock)
</div>
</td>
@Html.HiddenFor(modelItem => Model[i].ID)
</tr>
}
<强>加了:强>
抱歉,感谢 Darin Dimitrov ,您无法通过索引访问IEnumerable
,使用List
或Array
。
答案 1 :(得分:3)
您可以使用编辑器模板。我建议您先阅读following article,以了解您的代码未正确绑定集合的原因。一旦你明白你可以做到以下几点:
@model IEnumerable<FlatSystem.Models.Stock>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="sidemenu">
<div class="sidemenu-heading">
ReStock
</div>
<div class="div-body">
<table>
<thead>
<tr>
<th>Item Name</th>
<th>Wanted Stock</th>
<th>Stock On Hand</th>
<th></th>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</div>
</div>
<input type="submit" value="Submit" />
}
现在定义Stock
类型的自定义编辑器模板,该模板将自动为集合的每个元素呈现(~/Views/Shared/EditorTemplates/Stock.cshtml
) - 编辑器模板的名称和位置非常重要按惯例:
@model FlatSystem.Models.Stock
<tr>
<td>
@Html.DisplayFor(x => x.Item_Name)
</td>
<td>
@Html.DisplayFor(x => x.Wanted_Stock)
</td>
<td>
<div class="editor-field">
@Html.EditorFor(x => x.Actual_Stock)
@Html.ValidationMessageFor(x => x.Actual_Stock)
</div>
</td>
@Html.HiddenFor(x => x.ID)
</tr>
备注:您可能还希望将Wanted_Stock
和Item_Name
作为隐藏字段以及ID
包含在编辑器模板中,以便将其值发送到服务器,因为你没有相应的输入字段。