4

我在 C# 4 中使用命名参数和可选参数。

特别是,我在像这样在 ASP.NET MVC 中调用 HtmlHelpers 时尝试使用命名参数......

@Html.DropDownList(name: "ItemGroup", 
                   selectList: Model.ItemGroupList, 
                   htmlAttributes: new { style="width:300px;" })

但是,如果我想使用将 lambda 表达式作为其第一个参数而不是字符串值的强类型帮助器,该怎么办?

@Html.DropDownListFor(expression: m => m.ItemGroup, 
                      selectList: Model.ItemGroupList, 
                      htmlAttributes: new { style = "width:300px;" })

上面的代码表明了一个错误,类似于“类型参数......不能从用法中推断出来”。

巧合的是,这工作得很好......

@Html.DropDownListFor(m => m.ItemGroup, 
                      selectList: Model.ItemGroupList, 
                      htmlAttributes: new { style = "width:300px;" })

这可能是非常明显的事情,但是当我搜索它时,我很难找到任何可以很好地解释它的东西。我可能没有在寻找正确的术语或其他东西。无论如何,我可以向正确的方向轻推。

4

1 回答 1

1

关于您的“类型参数......无法从用法中推断”错误,我只能在发送到 selectList 参数的对象是 List 而不是 SelectList 时得到它。这对我来说正确呈现:

Html.DropDownListFor(x => x.ReferralAgencyId,
                selectList: new SelectList(Model.ReferralAgencies, "ReferralAgencyId", "Description", Model.ReferralAgencyId))

这会导致页面计时并且永远不会呈现:

Html.DropDownListFor(expression: x => x.ReferralAgencyId,
                selectList: new SelectList(Model.ReferralAgencies, "ReferralAgencyId", "Description", Model.ReferralAgencyId))

关于为什么为 lambda 表达式指定“表达式:”会导致页面挂起,我不确定。这绝对不是因为它不是可选参数,因为 Url.Action(actionName:"MyPage", controllerName: "MyController") 渲染得很好。看起来只是 lambda 表达式导致了这种行为。

于 2011-05-09T20:59:48.303 回答