Evg*_*vin 5 c# asp.net-mvc view-helpers razor asp.net-mvc-3
我有太多的文字实用的方法,如MakeShortText(string text, int length)
,RemoveTags(string text)
,TimeAgo(DateTime date)
等.我想从单独的帮助器访问它们,如下例所示:
@Text().MakeShortText(Model.Text, 10)
Run Code Online (Sandbox Code Playgroud)
是否可以创建此类扩展?或者我必须像这样为HtmlHelper做扩展:
@Html.Text().MaksShortText(Model.Text, 10)
Run Code Online (Sandbox Code Playgroud)
?
Dar*_*rov 11
您可以从定义自定义开始TextHelper
:
public class TextHelper
{
public TextHelper(ViewContext viewContext)
{
ViewContext = viewContext;
}
public ViewContext ViewContext { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
然后让你所有的方法都是这个的扩展方法TextHelper
:
public static class TextHelperExtensions
{
public static IHtmlString MakeShortText(
this TextHelper textHelper,
string text,
int value
)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以定义自定义网页:
public abstract class MyWebViewPage<T> : WebViewPage<T>
{
public override void InitHelpers()
{
base.InitHelpers();
Text = new TextHelper(ViewContext);
}
public TextHelper Text { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在~/Views/web.config
(未在~/web.config
)配置这个自定义网页作为基本页面使用你的剃须刀的观点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>
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您将能够使用:
@Text.MakeShortText(Model.Text, 10)
Run Code Online (Sandbox Code Playgroud)
如果您想使用以下语法,如问题所示:
@Text().MakeShortText(Model.Text, 10)
Run Code Online (Sandbox Code Playgroud)
只需修改自定义视图引擎,使其Text
不是属性,而是一个将返回该实例的方法TextHelper
.或者甚至返回HtmlHelper
实例,这样您就不需要将现有的扩展方法移动到TextHelper
:
public abstract class MyWebViewPage<T> : WebViewPage<T>
{
public HtmlHelper Text()
{
return Html;
}
}
Run Code Online (Sandbox Code Playgroud)
第二种语法也是可能的:
@Html.Text().MaksShortText(Model.Text, 10)
Run Code Online (Sandbox Code Playgroud)
只需Text()
为HtmlHelper
类定义自定义扩展:
public static class HtmlExtensions
{
public static TextHelper Text(this HtmlHelper htmlHelper)
{
return new TextHelper(htmlHelper.ViewContext);
}
}
Run Code Online (Sandbox Code Playgroud)
然后以与第一种情况相同的方式,您将自定义方法作为此类的扩展方法TextHelper
.
归档时间: |
|
查看次数: |
2028 次 |
最近记录: |