MVC 4如何将模型属性列表从视图传递给Action
Posted
技术标签:
【中文标题】MVC 4如何将模型属性列表从视图传递给Action【英文标题】:MVC4 How to Pass a model propery list to Action from view 【发布时间】:2013-10-06 13:35:13 【问题描述】:我正在尝试将具有列表属性的模型从视图传递到发布操作。该列表在发布时返回 null,但我们需要包含新项目的列表来更新其信息。我的模型如下所示:
public class Person()
internal string Name get;set;
internal decimal Age get;set;
internal List<int> Rate get;set;
视图中填充了它们的当前信息,我们使用 foreach 遍历列表,并为编辑功能生成文本框。当用户在编辑所需的值后点击提交时,视图将转到 [HttpPost] 操作,但值为空。
视图被 @using (html.BeginForm(Model)) 包围,在提交时,模型被传递给 post 操作,但列表为空。填充所有其他值。
有什么想法吗? 附言我们正在使用 c# 和 Razor View Engine 抱歉,列表仍然没有传递给模型,这里是 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>
【问题讨论】:
也发表你的看法 【参考方案1】:问题在于您的foreach
循环。您应该将其更改为 for
循环,并且绑定应该可以正常工作。
检查这些类似的问题和答案:
ASP.NET MVC 4 - for loop posts model collection properties but foreach does not
MVC Razor @foreach
【讨论】:
我仍然有问题列表没有传入模型这里是for循环【参考方案2】:我可以给你一个部分答案。要加载列表项,以便在 HttpPost 上返回它们,您需要在视图中执行此操作
for(int idx = 0;idx < Model.Rate.Count;idx++)
@Html.TextBox("Foo", Model.Rate[idx])
关键思想是@Html.TextBox("Foo", Model.Rate[idx])
,在引用速率列表项时必须使用索引器。这样,当您回发时,MVC 模型绑定器将能够获取列表项,包括对这些项的任何更改。
至于拾取用户添加的新项目,我不确定。也许另一个 SO 用户可以提供帮助?但希望我的回答能有所帮助。
【讨论】:
以上是关于MVC 4如何将模型属性列表从视图传递给Action的主要内容,如果未能解决你的问题,请参考以下文章
在 MVC 5 中,如何将表对象数据作为列表传递给控制器视图模型?
ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型
如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型