Вы можете начать с определения пользовательского TextHelper
:
public class TextHelper
{
public TextHelper(ViewContext viewContext)
{
ViewContext = viewContext;
}
public ViewContext ViewContext { get; private set; }
}
и тогда все ваши методы будут методами расширения этого TextHelper
:
public static class TextHelperExtensions
{
public static IHtmlString MakeShortText(
this TextHelper textHelper,
string text,
int value
)
{
...
}
}
Тогда вы можете определить пользовательскую веб-страницу:
public abstract class MyWebViewPage<T> : WebViewPage<T>
{
public override void InitHelpers()
{
base.InitHelpers();
Text = new TextHelper(ViewContext);
}
public TextHelper Text { get; private set; }
}
затем в вашей ~/Views/web.config
( не в ~/web.config
) настройте эту пользовательскую веб-страницу в качестве базовой страницы для представлений Razor с помощью атрибута pageBaseType
:
<pages pageBaseType="AppName.Web.Mvc.MyWebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
и тогда в ваших взглядах вы сможете использовать:
@Text.MakeShortText(Model.Text, 10)
И если вы хотите использовать следующий синтаксис, как показано в вашем вопросе:
@Text().MakeShortText(Model.Text, 10)
просто измените механизм пользовательского представления, чтобы Text
не было свойством, а методом, который будет возвращать экземпляр TextHelper
. Или даже вернуть экземпляр HtmlHelper
, чтобы вам не нужно было перемещать существующие методы расширения в TextHelper
:
public abstract class MyWebViewPage<T> : WebViewPage<T>
{
public HtmlHelper Text()
{
return Html;
}
}
Второй синтаксис также возможен:
@Html.Text().MaksShortText(Model.Text, 10)
Просто определите пользовательское расширение Text()
для класса HtmlHelper
:
public static class HtmlExtensions
{
public static TextHelper Text(this HtmlHelper htmlHelper)
{
return new TextHelper(htmlHelper.ViewContext);
}
}
и затем так же, как и в первом случае, ваши пользовательские методы будут методами расширения этого TextHelper
класса.