2013-03-29 4 views
5

Есть ли способ создать строго типизированное действие контроллера? Например:Проверка времени компиляции ссылок на действия с методами контроллера

в контроллере я использую:

aClientLink=Url.Action("MethodName", "ControllerName", new { Params... }); 

Я хотел бы использовать:

aClientLink=Url.Action(Controller.MethodName,ControllerName); 

Я не хочу, чтобы заново создать колесо. Я уверен, что у кого-то есть умное решение. Это позволило бы мне добавить проверку времени компиляции в методы контроллера.

+0

Мне нравится --- и попробуем. Решение. Но! –

ответ

3

Вы можете создать свои собственные методы расширения HtmlHelper, которые используют выражения (так же, как они используются для ссылки на свойства модели).

@* An expression used to indicate which property of the model should be 
examined. It may or may not actually be executed. *@ 
@Html.IdFor(o => o.FirstName) 

@* Don't actually evaluate the expression, just parse it for the method name *@ 
@Url.ActionFor(o => o.ControllerMethod()) 

Вы можете посмотреть на источник MVC для примеров вспомогательных методов, которые принимают выражения в качестве входных значений, и вы можете увидеть мои answer here о том, как получить метаданные свойства объекта из выражения.

Однако ...

Используется в целях, я бы сказал, что такой подход связывает ваш взгляд слишком плотно к контроллеру. Мне не нравятся магические струны, но они обеспечивают полную развязку.

Неясно, хотите ли вы использовать такие методы внутри контроллера, и в этом случае разделение проблем становится менее проблематичным. Вы все равно потеряете определенные способности, такие как способность псевдонима имени действия.

+0

Я пробовал конвертировать расширитель HtmlHelper, но это все клиентская сторона и не будет работать с контроллерами в качестве контекста не в моих статических классах, которые позволили бы мне определить имя контроллера/методы ... Я собираюсь использовать туповалую строку const пока я не смогу понять это. Больше не осталось времени. –

Смежные вопросы