custom を定義することから始めることができますTextHelper
:
public class TextHelper
{
public TextHelper(ViewContext viewContext)
{
ViewContext = viewContext;
}
public ViewContext ViewContext { get; private set; }
}
次に、すべてのメソッドを this の拡張メソッドにしますTextHelper
。
public static class TextHelperExtensions
{
public static IHtmlString MakeShortText(
this TextHelper textHelper,
string text,
int value
)
{
...
}
}
次に、カスタム Web ページを定義できます。
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
を使用して、このカスタム Web ページを 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;
}
}
2 番目の構文も可能です。
@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
クラスの拡張メソッドにします。