这是我得到的错误:
描述:期间发生错误 编译所需的资源 为此请求提供服务。请查阅 以下具体错误详情 并修改您的源代码 适当。
编译器错误消息:CS0411: 方法的类型参数 “System.Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>中 System.Collections.Generic.IEnumerable)” 无法从使用中推断出来。尝试 指定类型参数 明确。
<div class="editor-field">
<%: Html.DropDownListFor(model => model.Country, ViewData["Countries"] as SelectList) %>
<%: Html.DropDownListFor(Model.Country, ViewData["Countries"] as SelectList) %>
<%: Html.ValidationMessageFor(model => model.Country) %>
</div>
第一个DropDownListFor效果很好;第二个给了我例外。我很好奇为什么会这样。如果我直接输入模型,我仍然会得到它的归属列表。为什么这会破裂?
感谢您的帮助!
答案 0 :(得分:3)
DropDownListFor需要一个lambda表达式(实际上是Expression<Func<TModel, TProperty>>
)。 Model.Country既不是表达也不是函数,所以它不会在那里工作。
答案 1 :(得分:0)
它与辅助方法的方法签名有关。它用于对象的通用动态评估。
您可以将自己的重载写入仅使用所需功能的帮助程序。
答案 2 :(得分:0)
在一个非常相似的说明中,我遇到了MVC3 / Razor的这个问题,因为我在HTML中循环遍历模型的集合。我试图使用循环变量,我得到了这个错误。在我的例子中,解决方案是使用我的LINQ查询中的循环变量返回模型。
我的循环:
@foreach (BookField bookField in Model.BookFields)
更改@ Html.DropDownListFor中的第一个parm来自...
bookField
要...
model => model.BookFields.First(q => q.BookFieldId == bookField.Id).Value
完整的陈述现在看起来像这样:
@Html.DropDownListFor(model => model.BookFields.First(q => q.BookFieldID == bookField.Id).Value, new SelectList(ViewData[ddlKey] as Dictionary<string, string>, "Key", "Value", bookField.Value), "[select]")
注意,我为这个例子任意改名了一些东西,所以它可能没有太大的逻辑意义;我只是希望它有足够的语法意义来帮助其他人解决同样的问题:)