У меня есть приложение ASP.NET MVC3 (с Razor), где я позволяю пользователям указывать компоненты для представления - например, макет или частичные компоненты, которые я использую для визуализации содержимого. (Например, у меня есть модель с Title
и Description
, и я разрешаю пользователям указывать частичное CSHTML в определенном каталоге, который я использую для визуализации данных.)
Проблема, с которой я сталкиваюсь, заключается в изоляции и простоте использования для моих пользователей. Например, в настоящее время они могут писать код в своих частях, например:
@Html.ActionLink("edit", "Edit", "Content", new { Id = Model.Id }, null)
Вместо этого я хотел бы, чтобы они написали что-то вроде:
@SomeHelper.EditLinkFor(Model.Id)
Прямо сейчас, все мои контроллеры являются частью общедоступного API. Пользователи должны знать имена контроллеров и действий, чтобы указывать определенные ссылки (например, редактировать ссылку). Я хотел бы предоставить упрощенный API.
Но как мне это сделать? Если я просто создаю класс SomeHelper
, попытка вызвать @Html.ActionLink
не принесет большого прогресса. Я пытался написать:
return System.Web.Mvc.Html.LinkExtensions.ActionLink(null, content.Title, "Details", "Content", new { Id = content.Id }, null);
Но я получаю исключение нулевого указателя. Создать экземпляр HtmlHelper
для первого параметра непросто.
Какие у меня варианты? Я застрял с предоставлением им полного доступа ко всем моим контроллерам в рамках моего API? Нет ли способа предоставить упрощенный API для их потребления? (Я не пытаюсь заблокировать их от написания кода Razor; только инкапсулирую и упрощаю вызовы и устраняю основную зависимость от моих контроллеров и моделей.)