我正在使用MVC5和EF6。我需要在视图中创建几十个下拉列表,其中包含随后在整个Web应用程序中使用的用户可选择的首选项。
我遇到的问题是剃刀视图中的LabelFor和DropdownListFor行都出错:
编译器错误消息:CS0411:方法的类型参数' System.Web.Mvc.Html.LabelExtensions.LabelFor System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression>,string)&# 39;无法从使用中推断出来。尝试明确指定类型参数。
我已经通过我的代码进行了跟踪,以确保Model.Preferences
包含我想要的数据,确实如此。实际上,它适用于Html.Label
和Html.DropdownList
,但我无法通过这种方式使所选项目正常工作,所以我切换到DropdownListFor
,因为我找到了在这方面更容易合作。
以下是我的代码片段(正在进行的工作):
一个包含IEnumerable的SelectListItem的简单类:
public class Preference
{
public string ControlType; // "Select", "Textbox"
public string Label; // Label of control
public IEnumerable<SelectListItem> ListItems;
}
模型(一个IEnumerable of Preference给我&#39;偏好&#39;)
public class UserPreferencesViewModel
{
public IEnumerable<Preference> Preferences { get; set; }
}
CONTROLLER
List<Preference> Preferences = new List<Preference>();
foreach (var g in uomGroups)
{
List<SelectListItem> listitems = new List<SelectListItem>();
foreach (var w in g.Options)
{
... Omitted for brevity ...
listitems.Add( new SelectListItem { Text = w.UOMId, Value = w.UOMId, Selected = isSelected } )
}
var p = g.Options.ToArray();
Preferences.Add( new Preference
{
ControlType = "Select",
Label = g.Preference,
ListItems = listitems
});
}
model.Preferences = Preferences.AsEnumerable();
return View(model);
查看
<tbody>
@foreach (Preference preference in Model.Preferences)
{
<tr>
<td>
@Html.LabelFor(
x => x.Label,
new { @class = "col-md-3 control-label" }
)
</td>
<td>
@Html.DropDownListFor(
x => x.Label,
new SelectList(preference.ListItems, "Value", "Text"),
new { @class = "col-md-3 form-control" }
)
</td>
</tr>
}
</tbody>
从上面的代码中,有人看到问题所在吗?我一直试图弄清楚这几个小时,只是没有看到它。
答案 0 :(得分:1)
应该是
@foreach (Preference preference in Model.Preferences)
{
...
@Html.LabelFor(i => preference.Label, ...
...
@Html.DropDownListFor(i => preference.Label, preference.ListItems, ...
...
修改强>
如果您需要唯一的ID和名称,那么它需要是for
循环才能正确编入索引
@for (int i = 0; i < Model.Preferences.Count; i++)
{
...
@Html.LabelFor(i => Model.Preferences[i].Label, ...
...
@Html.DropDownListFor(i => Model.Preferences[i].Label, preference.ListItems, ..
...
这将呈现类似
的html<select id = "Preferences_1__Label" name="Preferences[1].Label" ...
<select id = "Preferences_2__Label" name="Preferences[2].Label" ...