MVC 文本框绑定多个属性
MVC Textbox binding multiple properties
我正在尝试找到 present/save 我正在创建的视图中的数据的最佳方法。
我不拘泥于底层 table 结构,并且尝试过尝试获得最佳结果但没有运气。
实际上我有多个文本框需要保存回数据库,但由于视图布局(它确实需要保留在这个布局中),我需要用硬编码信息填充其他列。
在我看来,我只是重复了文本框(我试图为其编制索引,但收到一条错误消息,提示无法对十进制数据类型进行索引?)
下面是我的模型
namespace Testing.Models
{
public partial class OnFarm
{
public int Id { get; set; }
public Guid? Tracker { get; set; }
public int Year { get; set; }
public decimal? Period1 { get; set; }
public decimal? Period2 { get; set; }
public decimal? Period3 { get; set; }
public decimal? Period4 { get; set; }
public decimal? Period5 { get; set; }
public decimal? Period6 { get; set; }
public decimal? Period7 { get; set; }
public decimal? Period8 { get; set; }
public decimal? Period9 { get; set; }
public decimal? Period10 { get; set; }
public decimal? Period11 { get; set; }
public decimal? Period12 { get; set; }
public int Version { get; set; }
public int Account { get; set; }
public int MvtType { get; set; }
public virtual Account AccountNavigation { get; set; }
public virtual MovementType MvtTypeNavigation { get; set; }
public virtual ProductionModule TrackerNavigation { get; set; }
public virtual Version VersionNavigation { get; set; }
public virtual Years YearNavigation { get; set; }
}
}
这是我目前的控制器
public IActionResult Create(Guid? id)
{
var query = _context.LegalEntities.FromSqlRaw("Select DISTINCT B.* From Client.Groups a Left join Client.[Legal Entities] b on b.Parent = a.ID left join client.Enterprises c on c.Parent = b.ID left join client.[Production Module] d on d.Parent = c.ID left join OnFarm.[On Farm] e on e.Tracker = d.ID Where e.id IS NOT NULL AND a.id = {0}", id).ToList();
List<SelectListItem> LEList = new List<SelectListItem>();
foreach (var m in query)
{
LEList.Add(new SelectListItem { Text = m.Name, Value = m.Id.ToString() });
}
ViewBag.LE = LEList;
var acclist = _context.Accounts.Where(x => x.AccountCatId == 92100).ToList().OrderBy(x => x.Description);
List<SelectListItem> listac = new List<SelectListItem>();
listac.Add(new SelectListItem { Text = "--Select Livestock Type--", Value = "0" });
if (acclist != null)
{
var i = 1;
foreach (var x in acclist)
{
listac.Add(new SelectListItem { Text = x.Description, Value = x.Number.ToString() });
i += 1;
}
}
ViewBag.Account = listac;
ViewData["MvtType"] = new SelectList(_context.MovementTypes, "Id", "Type");
ViewData["Tracker"] = new SelectList(_context.ProductionModules, "Id", "Name");
ViewData["Version"] = new SelectList(_context.Versions, "VersionId", "VersionName");
ViewData["Year"] = new SelectList(_context.Year, "Id", "Year");
return View();
}
这是我的看法
<div class="row">
@foreach (var item in ViewBag.LE)
{
<div class="panel panel-default rounded shadow col-11">
<div class="panel-heading border-bottom">
<div class="no-gutters"><h4><b>@item.Text</b></h4></div>
</div>
<div class="panel-body">
<div class="row">
@foreach (var i in ViewBag.Tracker)
{
<div class="row d-flex align-items-center">
<div class="panel panel-default rounded shadow col">
<div class="panel-heading border-bottom">
<div class="no-gutters text-muted col-5"><h3><b> @i.Text</b></h3></div>
<div class="col-2">
<select asp-for="Account" class="form-control" asp-items="ViewBag.Account"></select>
</div>
</div>
<div class="panel-body">
<div class="row d-flex align-items-center">
<div class="col-1"><b>Month</b></div>
<div class="col-1 d-flex justify-content-center"><b>Opening Balance</b></div>
<div class="col-1 d-flex justify-content-center"><b>Births</b></div>
<div class="col-1 d-flex justify-content-center"><b>Deaths</b></div>
<div class="col-1 d-flex justify-content-center"><b>Purchases</b></div>
<div class="col-1 d-flex justify-content-center"><b>Sold</b></div>
<div class="col-1 d-flex justify-content-center"><b>Age In</b></div>
<div class="col-1 d-flex justify-content-center"><b>Age Out</b></div>
<div class="col-1 d-flex justify-content-center"><b>Adjustments</b></div>
<div class="col-1 d-flex justify-content-center"><b>Closing Balance</b></div>
</div>
<div class="row d-flex align-items-center">
<div class="col-1">
Apr
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
</div>
现在面板 body 重复 12 次(一年中的每个月)。
保存回数据时,我会为一些核心信息设置一些隐藏字段。但我需要做的是,在保存第一个文本框时,它还需要将 MvtType(硬编码为列标题)保存为列值。
我会将面板包装成一个表单,以便在单击按钮时提交。
最后,底层table。我曾经有一个名为 period 的专栏,一个名为 value,我认为这可能是一种更好的方法吗?而不是每个时期分开。
哦,抱歉,我需要在加载页面时将数据加载到这些文本框
非常感谢任何帮助
编辑
好的,所以我在这里取得了一些进展。我已经整理了我的观点(见下文),现在可以让我的观点传回运动类型的第一列,但其他列中没有任何内容。我实际上希望能够 post 将值返回到周期列,同时将值添加到 Mvt 类型列。
<div class="row">
@foreach (var item in ViewBag.LE)
{
<div class="panel panel-default rounded shadow col-11">
<div class="panel-heading border-bottom">
<div class="no-gutters"><h4><b>@item.Text</b></h4></div>
</div>
<div class="panel-body">
<div class="row">
@foreach (var i in ViewBag.Tracker)
{
<form asp-action="Create" class="form-group">
<div class="form-group">
<label asp-for="Tracker" class="control-label"></label>
<select asp-for="Tracker" class="form-control" asp-items="ViewBag.Tracker"></select>
</div>
<div class="form-group">
<label asp-for="Year" class="control-label"></label>
<select asp-for="Year" class="form-control" asp-items="ViewBag.Year"></select>
</div>
<div class="form-group">
<label asp-for="Version" class="control-label"></label>
<select asp-for="Version" class="form-control" asp-items="ViewBag.Version"></select>
</div>
<div class="row d-flex align-items-center">
<div class="panel panel-default rounded shadow col">
<div class="panel-heading border-bottom">
<div class="no-gutters text-muted col-5"><h3><b> @i.Text</b></h3></div>
<div class="col-2">
<select asp-for="Account" class="form-control" asp-items="ViewBag.Account"></select>
</div>
</div>
<div class="panel-body">
<div class="row d-flex align-items-center">
<div class="col-1"><b>Month</b></div>
<div class="col-1 d-flex justify-content-center"><b>Opening Balance</b></div>
@foreach (var mvt in ViewBag.MVtType)
{
<div class="col-1 d-flex justify-content-center">
<b>@mvt.Text</b>
</div>
}
<div class="col-1 d-flex justify-content-center"><b>Closing Balance</b></div>
</div>
<div class="row d-flex align-items-center">
<div class="col-1">
Apr
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
@for (int z = 0; z < ViewBag.MvtType.Count; z++)
{
<div class="col-1">
<select asp-for= "MvtType" class="form-control" asp-items="ViewBag.MvtType"></select>
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
}
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-8"></div>
<div class="col-2">
<input type="submit" value="Save" class="btn btn-primary float-right" />
</div>
</div>
</form>
}
</div>
</div>
</div>
}
</div>
对了,我已经找到答案了。
在此处遵循此指南Editing Multiple records using model binding in MVC
我得到了答案。
我的视图现在看起来像这样,允许索引文本框,这样我就可以编辑多条记录,而不仅仅是一条!我会更新它,让它看起来更漂亮,并隐藏某些字段
<div class="panel-body">
@using (Html.BeginForm("Index","OnFarms", FormMethod.Post))
{
<table class="table">
@for (int z = 0; z < Model.Count; z++)
{
<tr>
<td>
@Html.TextBox("OnFarms[" + @z + "].Id", Model[z].Id, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Tracker", Model[z].Tracker, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Year", Model[z].Year, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period1", Model[z].Period1, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period2", Model[z].Period2, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period3", Model[z].Period3, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period4", Model[z].Period4, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period5", Model[z].Period5, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period6", Model[z].Period6, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period7", Model[z].Period7, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period9", Model[z].Period9, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period10", Model[z].Period10, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period11", Model[z].Period11, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period12", Model[z].Period12, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Version", Model[z].Version, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Account", Model[z].Account, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].MvtType", Model[z].MvtType, new { @class = "form-Control" })
</td>
<td>
</td>
</tr>
}
</table>
<input type="submit" value="Submit" />
}
</div>
但关键是将@model 更改为@model List 而不仅仅是 Testing.Models.OnFarm
我的控制器只是
public ActionResult Index(List<OnFarm> OnFarms)
{
foreach (OnFarm frm in OnFarms)
{
OnFarm Existed_Mvt = _context.OnFarms.Find(frm.Id);
Existed_Mvt.Tracker = frm.Tracker;
Existed_Mvt.Year = frm.Year;
Existed_Mvt.Period1 = frm.Period1;
Existed_Mvt.Period2 = frm.Period2;
Existed_Mvt.Period3 = frm.Period3;
Existed_Mvt.Period4 = frm.Period4;
Existed_Mvt.Period5 = frm.Period5;
Existed_Mvt.Period6 = frm.Period6;
Existed_Mvt.Period7 = frm.Period7;
Existed_Mvt.Period8 = frm.Period8;
Existed_Mvt.Period9 = frm.Period9;
Existed_Mvt.Period10 = frm.Period10;
Existed_Mvt.Period11 = frm.Period11;
Existed_Mvt.Period12 = frm.Period12;
Existed_Mvt.Version = frm.Version;
Existed_Mvt.Account = frm.Account;
Existed_Mvt.MvtType = frm.MvtType;
}
_context.SaveChanges();
我正在尝试找到 present/save 我正在创建的视图中的数据的最佳方法。
我不拘泥于底层 table 结构,并且尝试过尝试获得最佳结果但没有运气。
实际上我有多个文本框需要保存回数据库,但由于视图布局(它确实需要保留在这个布局中),我需要用硬编码信息填充其他列。
在我看来,我只是重复了文本框(我试图为其编制索引,但收到一条错误消息,提示无法对十进制数据类型进行索引?)
下面是我的模型
namespace Testing.Models
{
public partial class OnFarm
{
public int Id { get; set; }
public Guid? Tracker { get; set; }
public int Year { get; set; }
public decimal? Period1 { get; set; }
public decimal? Period2 { get; set; }
public decimal? Period3 { get; set; }
public decimal? Period4 { get; set; }
public decimal? Period5 { get; set; }
public decimal? Period6 { get; set; }
public decimal? Period7 { get; set; }
public decimal? Period8 { get; set; }
public decimal? Period9 { get; set; }
public decimal? Period10 { get; set; }
public decimal? Period11 { get; set; }
public decimal? Period12 { get; set; }
public int Version { get; set; }
public int Account { get; set; }
public int MvtType { get; set; }
public virtual Account AccountNavigation { get; set; }
public virtual MovementType MvtTypeNavigation { get; set; }
public virtual ProductionModule TrackerNavigation { get; set; }
public virtual Version VersionNavigation { get; set; }
public virtual Years YearNavigation { get; set; }
}
}
这是我目前的控制器
public IActionResult Create(Guid? id)
{
var query = _context.LegalEntities.FromSqlRaw("Select DISTINCT B.* From Client.Groups a Left join Client.[Legal Entities] b on b.Parent = a.ID left join client.Enterprises c on c.Parent = b.ID left join client.[Production Module] d on d.Parent = c.ID left join OnFarm.[On Farm] e on e.Tracker = d.ID Where e.id IS NOT NULL AND a.id = {0}", id).ToList();
List<SelectListItem> LEList = new List<SelectListItem>();
foreach (var m in query)
{
LEList.Add(new SelectListItem { Text = m.Name, Value = m.Id.ToString() });
}
ViewBag.LE = LEList;
var acclist = _context.Accounts.Where(x => x.AccountCatId == 92100).ToList().OrderBy(x => x.Description);
List<SelectListItem> listac = new List<SelectListItem>();
listac.Add(new SelectListItem { Text = "--Select Livestock Type--", Value = "0" });
if (acclist != null)
{
var i = 1;
foreach (var x in acclist)
{
listac.Add(new SelectListItem { Text = x.Description, Value = x.Number.ToString() });
i += 1;
}
}
ViewBag.Account = listac;
ViewData["MvtType"] = new SelectList(_context.MovementTypes, "Id", "Type");
ViewData["Tracker"] = new SelectList(_context.ProductionModules, "Id", "Name");
ViewData["Version"] = new SelectList(_context.Versions, "VersionId", "VersionName");
ViewData["Year"] = new SelectList(_context.Year, "Id", "Year");
return View();
}
这是我的看法
<div class="row">
@foreach (var item in ViewBag.LE)
{
<div class="panel panel-default rounded shadow col-11">
<div class="panel-heading border-bottom">
<div class="no-gutters"><h4><b>@item.Text</b></h4></div>
</div>
<div class="panel-body">
<div class="row">
@foreach (var i in ViewBag.Tracker)
{
<div class="row d-flex align-items-center">
<div class="panel panel-default rounded shadow col">
<div class="panel-heading border-bottom">
<div class="no-gutters text-muted col-5"><h3><b> @i.Text</b></h3></div>
<div class="col-2">
<select asp-for="Account" class="form-control" asp-items="ViewBag.Account"></select>
</div>
</div>
<div class="panel-body">
<div class="row d-flex align-items-center">
<div class="col-1"><b>Month</b></div>
<div class="col-1 d-flex justify-content-center"><b>Opening Balance</b></div>
<div class="col-1 d-flex justify-content-center"><b>Births</b></div>
<div class="col-1 d-flex justify-content-center"><b>Deaths</b></div>
<div class="col-1 d-flex justify-content-center"><b>Purchases</b></div>
<div class="col-1 d-flex justify-content-center"><b>Sold</b></div>
<div class="col-1 d-flex justify-content-center"><b>Age In</b></div>
<div class="col-1 d-flex justify-content-center"><b>Age Out</b></div>
<div class="col-1 d-flex justify-content-center"><b>Adjustments</b></div>
<div class="col-1 d-flex justify-content-center"><b>Closing Balance</b></div>
</div>
<div class="row d-flex align-items-center">
<div class="col-1">
Apr
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
</div>
现在面板 body 重复 12 次(一年中的每个月)。
保存回数据时,我会为一些核心信息设置一些隐藏字段。但我需要做的是,在保存第一个文本框时,它还需要将 MvtType(硬编码为列标题)保存为列值。
我会将面板包装成一个表单,以便在单击按钮时提交。
最后,底层table。我曾经有一个名为 period 的专栏,一个名为 value,我认为这可能是一种更好的方法吗?而不是每个时期分开。
哦,抱歉,我需要在加载页面时将数据加载到这些文本框
非常感谢任何帮助
编辑 好的,所以我在这里取得了一些进展。我已经整理了我的观点(见下文),现在可以让我的观点传回运动类型的第一列,但其他列中没有任何内容。我实际上希望能够 post 将值返回到周期列,同时将值添加到 Mvt 类型列。
<div class="row">
@foreach (var item in ViewBag.LE)
{
<div class="panel panel-default rounded shadow col-11">
<div class="panel-heading border-bottom">
<div class="no-gutters"><h4><b>@item.Text</b></h4></div>
</div>
<div class="panel-body">
<div class="row">
@foreach (var i in ViewBag.Tracker)
{
<form asp-action="Create" class="form-group">
<div class="form-group">
<label asp-for="Tracker" class="control-label"></label>
<select asp-for="Tracker" class="form-control" asp-items="ViewBag.Tracker"></select>
</div>
<div class="form-group">
<label asp-for="Year" class="control-label"></label>
<select asp-for="Year" class="form-control" asp-items="ViewBag.Year"></select>
</div>
<div class="form-group">
<label asp-for="Version" class="control-label"></label>
<select asp-for="Version" class="form-control" asp-items="ViewBag.Version"></select>
</div>
<div class="row d-flex align-items-center">
<div class="panel panel-default rounded shadow col">
<div class="panel-heading border-bottom">
<div class="no-gutters text-muted col-5"><h3><b> @i.Text</b></h3></div>
<div class="col-2">
<select asp-for="Account" class="form-control" asp-items="ViewBag.Account"></select>
</div>
</div>
<div class="panel-body">
<div class="row d-flex align-items-center">
<div class="col-1"><b>Month</b></div>
<div class="col-1 d-flex justify-content-center"><b>Opening Balance</b></div>
@foreach (var mvt in ViewBag.MVtType)
{
<div class="col-1 d-flex justify-content-center">
<b>@mvt.Text</b>
</div>
}
<div class="col-1 d-flex justify-content-center"><b>Closing Balance</b></div>
</div>
<div class="row d-flex align-items-center">
<div class="col-1">
Apr
</div>
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
@for (int z = 0; z < ViewBag.MvtType.Count; z++)
{
<div class="col-1">
<select asp-for= "MvtType" class="form-control" asp-items="ViewBag.MvtType"></select>
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
}
<div class="col-1">
@Html.TextBoxFor(m => m.Period1, new { @class = "form-control", disabled = "disabled" })
<span asp-validation-for="Period1" class="text-danger"></span>
</div>
</div>
</div>
</div>
</div>
<div class="row d-flex align-items-center">
<div class="col-8"></div>
<div class="col-2">
<input type="submit" value="Save" class="btn btn-primary float-right" />
</div>
</div>
</form>
}
</div>
</div>
</div>
}
</div>
对了,我已经找到答案了。
在此处遵循此指南Editing Multiple records using model binding in MVC
我得到了答案。
我的视图现在看起来像这样,允许索引文本框,这样我就可以编辑多条记录,而不仅仅是一条!我会更新它,让它看起来更漂亮,并隐藏某些字段
<div class="panel-body">
@using (Html.BeginForm("Index","OnFarms", FormMethod.Post))
{
<table class="table">
@for (int z = 0; z < Model.Count; z++)
{
<tr>
<td>
@Html.TextBox("OnFarms[" + @z + "].Id", Model[z].Id, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Tracker", Model[z].Tracker, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Year", Model[z].Year, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period1", Model[z].Period1, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period2", Model[z].Period2, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period3", Model[z].Period3, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period4", Model[z].Period4, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period5", Model[z].Period5, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period6", Model[z].Period6, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period7", Model[z].Period7, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period9", Model[z].Period9, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period10", Model[z].Period10, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period11", Model[z].Period11, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Period12", Model[z].Period12, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Version", Model[z].Version, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].Account", Model[z].Account, new { @class = "form-Control" })
</td>
<td>
@Html.TextBox("OnFarms[" + @z + "].MvtType", Model[z].MvtType, new { @class = "form-Control" })
</td>
<td>
</td>
</tr>
}
</table>
<input type="submit" value="Submit" />
}
</div>
但关键是将@model 更改为@model List
我的控制器只是
public ActionResult Index(List<OnFarm> OnFarms)
{
foreach (OnFarm frm in OnFarms)
{
OnFarm Existed_Mvt = _context.OnFarms.Find(frm.Id);
Existed_Mvt.Tracker = frm.Tracker;
Existed_Mvt.Year = frm.Year;
Existed_Mvt.Period1 = frm.Period1;
Existed_Mvt.Period2 = frm.Period2;
Existed_Mvt.Period3 = frm.Period3;
Existed_Mvt.Period4 = frm.Period4;
Existed_Mvt.Period5 = frm.Period5;
Existed_Mvt.Period6 = frm.Period6;
Existed_Mvt.Period7 = frm.Period7;
Existed_Mvt.Period8 = frm.Period8;
Existed_Mvt.Period9 = frm.Period9;
Existed_Mvt.Period10 = frm.Period10;
Existed_Mvt.Period11 = frm.Period11;
Existed_Mvt.Period12 = frm.Period12;
Existed_Mvt.Version = frm.Version;
Existed_Mvt.Account = frm.Account;
Existed_Mvt.MvtType = frm.MvtType;
}
_context.SaveChanges();