Могу ли я использовать именованный аргумент при вызове метода с лямбда-выражением для параметра? - PullRequest
3 голосов
/ 09 мая 2011

Я играю с именованными аргументами и необязательными параметрами в C # 4.

В частности, я пытаюсь использовать именованные аргументы при вызове HtmlHelpers в ASP.NET MVC, например, так ...

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

Но что если я захочу использовать строго типизированные помощники, которые принимают лямбда-выражение в качестве первого параметра вместо строкового значения?

@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;" })

Это, вероятно, что-то действительно очевидное, но яМне трудно найти что-то, что объясняет это хорошо, когда я ищу это.Я, наверное, не ищу правильные термины или что-то.В любом случае, я мог бы использовать толчок в правильном направлении.

1 Ответ

0 голосов
/ 10 мая 2011

Относительно вашей ошибки "аргументы типа ... не могут быть выведены из использования", я смог получить ее только тогда, когда объект, отправленный аргументу 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))

Относительно , почему указание "выражения:" для лямбда-выражения может привести к зависанию страницы, я не уверен. Это определенно не потому, что это необязательный параметр, потому что Url.Action (actionName: «MyPage», controllerName: «MyController») рендерится нормально. Похоже, что только лямбда-выражения вызывают такое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...