我知道这个问题已被问了很多时间,但原谅我,因为我现在已经浪费了很多时间,因此最终发布了它。 总而言之,我有一个视图模型具有一些复杂类型的属性和复杂的类型列表属性。
public class ViewModel
{
public ViewModel()
{
Gains = new List<Gain>();
}
[UIHint("Common")]
public AllRegRecordsLog commonRegisterFields { get; set; }
public Potential Potential { get; set; }
[UIHint("Gains")]
public List<Gain> Gains { get; set; }
public void CreateGains(int count = 1)
{
for (int i = 0; i < count; i++)
{
Gains.Add(new Gain());
}
}
}
现在我的视图createOrEdit我将此属性称为
@Html.EditorFor(model => model.Gains)
我在我的特定视图文件夹中放置了一个编辑器模板
@model Gains
table id="gainsTable" class="content-tables"style="width:98%">
<tr id="defaultGainsRow">
<td class="editor-label">
@Html.LabelFor(model => model.VolumeGainLow)
</td>
<td class="editor-field">
@Html.TextBoxFor(model => model.VolumeGainLow)
@Html.ValidationMessageFor(model => model.VolumeGainLow)
</td>
</tr>
<tr>
<td colspan="4">
<input id="addGainsButton"type="button" class="t-button" Value="Add Potential Gains"/>
</td>
</tr>
</table>
但不知怎的,我得到错误“传入字典的模型项是'System.Collections.Generic.List类型但是期望收益”
我正在使用asp.Net MVC 4
请指出我正确的方向。
谢谢
比拉尔
答案 0 :(得分:1)
感谢您的帮助,我使用以下帖子解决了问题
http://ivanz.com/2011/06/16/editing-variable-length-reorderable-collections-in-asp-net-mvc-part-1/
答案 1 :(得分:0)
修改editortemplate以获取List并在
中执行循环逻辑@model List<Gain>
@foreach(var gain in Model)
{
table id="gainsTable" class="content-tables"style="width:98%">
<tr id="defaultGainsRow">
<td class="editor-label">
@Html.LabelFor(gain=> gain.VolumeGainLow)
</td>
<td class="editor-field">
@Html.TextBoxFor(gain=> gain.VolumeGainLow)
@Html.ValidationMessageFor(gain=> gain.VolumeGainLow)
</td>
</tr>
<tr>
<td colspan="4">
<input id="addGainsButton"type="button" class="t-button" Value="Add Potential Gains"/>
</td>
</tr>
</table>
}
编辑:我的剃刀可能不是100%,但你明白了
答案 2 :(得分:0)
看起来您正在尝试将视图声明为绑定到属性而不是类型。这是不可能的。您必须将模型声明为Web项目引用的有效类型,以便模板化。
Gains
属性的类型为List<Gain
&gt; . Since your
收益view has a
收益type declared, your
UIHintAttribute`无效。