5

MakeShortText(string text, int length)RemoveTags(string text)TimeAgo(DateTime date)その他のテキスト ユーティリティ メソッドが多すぎます。次の例のように、別のヘルパーからそれらにアクセスしたい:

@Text().MakeShortText(Model.Text, 10)

そのような拡張機能を作成することは可能ですか? または、次のように HtmlHelper の拡張機能を作成する必要があります。

@Html.Text().MaksShortText(Model.Text, 10)

?

4

1 に答える 1

11

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クラスの拡張メソッドにします。

于 2012-02-05T11:00:57.510 に答える