MVC4 如何将模型属性列表从视图传递到操作
本文关键字:视图 操作 列表 模型 属性 MVC4 | 更新日期: 2023-09-27 18:33:23
我正在尝试将具有列表属性的模型从视图中传递到后期操作。该列表在发布时返回为空,但我们需要包含新项目的列表来更新其信息。我的模型如下所示:
public class Person()
{
internal string Name {get;set;}
internal decimal Age {get;set;}
internal List<int> Rate {get;set;}
}
视图填充了他们的当前信息,我们使用 foreach 循环访问列表,并为编辑功能生成文本框。当用户在编辑所需值后点击提交时,视图将转到 [HttpPost] 操作,但值为 null。
视图周围有一个@using(Html.BeginForm(Model)),在提交时,模型将传递给发布操作,但列表为空。将填充所有其他值。
有什么想法吗?附言我们正在使用 c# 和 Razor 视图引擎 抱歉,列表仍然没有传递给模型,这里是 4 循环。
@{ int i = 0;}
<table>
@for (i = 0; i < Model.VendorContracts.Count; i++ )
{
if (i == 0)
{
<tr>
<th>
Vendor Contracts
</th>
<th>
Effective Date
</th>
</tr>
}
if (i < 5)
{
<tr>
<td>@Model.VendorContracts[i]
</td>
<td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
</tr>
}
if (i == 5 || i == 10 || i == 15 || i == 20)
{
@:</table>
@:<table>
}
if (i >= 5)
{
if (i == 5 || i == 10 || i == 15 || i == 20)
{
<tr>
<th>Vendor Contracts
</th>
<th>
Effective Date
</th>
</tr>
}
<tr>
<td>
@Model.VendorContracts[i]
</td>
<td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
</tr>
}
}
</table>
问题出在您的foreach
循环上。应将其更改为for
循环,并且绑定应正常工作。
检查以下类似的问题和答案:
ASP.NET MVC 4 - 用于循环帖子模型集合属性,但 foreach 不
MVC 剃须刀@foreach
我可以给你一个部分答案。若要加载列表项,以便在 HttpPost 上返回它们,需要在视图中执行此操作
for(int idx = 0;idx < Model.Rate.Count;idx++)
{
@Html.TextBox("Foo", Model.Rate[idx])
}
关键思想是@Html.TextBox("Foo", Model.Rate[idx])
,在引用 Rate 列表项时必须使用索引器。这样,当您回发时,MVC 模型绑定程序将能够选取列表项,包括对这些项的任何更改。
至于拿起用户添加的新项目,我不确定。也许另一个SO用户可以提供帮助?但希望我的回答有所帮助。