2011-05-09 68 views
3

我玩弄在C#命名參數和可選參數4.在調用具有參數lambda表達式的方法時,是否可以使用命名參數?

特別是,我想打電話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;" }) 

這可能是東西真的很明顯,但我很難找到任何解釋得很好,當我搜索。我可能沒有在尋找合適的術語或其他東西。無論如何,我可以用正確的方向輕推。

回答

0

關於您的「類型參數...不能從使用推斷」錯誤,我只能得到,當發送到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表達式導致這種行爲。

+0

當視圖試圖渲染表達式作爲命名參數列出的特定錯誤是... '編譯器錯誤消息:CS0411:方法'System.Web.Mvc.Html的類型參數。 SelectExtensions.DropDownListFor (System.Web.Mvc.HtmlHelper ,System.Linq.Expressions.Expression >,System.Collections.Generic.IEnumerable ,object)'不能從使用情況中推斷出來。請嘗試明確指定類型參數.' 感謝您查看它,我同意它只是與我看到它發生的Lambdas。 – 2011-05-10 02:52:15

相關問題