从另一个人那里召唤一个Razor助手

Sib*_*Guy 3 asp.net-mvc razor

我需要创建Razor帮助器的第二个重载,并希望从另一个帮助器调用一个帮助器(带有一些特定的参数).有没有办法实现它?

Dar*_*rov 6

当然:

using System.Web.Mvc;
using System.Web.Mvc.Html;

public static class ActionLinkExtensions
{
    public static IHtmlString MyActionLink(this HtmlHelper html)
    {
        // call the base ActionLink helper:
        return html.ActionLink("some text", "someAction");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

@Html.MyActionLink()
Run Code Online (Sandbox Code Playgroud)

如果您正在谈论@helperRazor助手,则需要传递HtmlHelperas参数的实例,因为它在助手上下文中不可用:

@helper MyActionLink(HtmlHelper html)
{
    @html.ActionLink("some text", "someAction")
}
Run Code Online (Sandbox Code Playgroud)

然后:

@MyActionLink(Html)
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢第一种方法,因为它是视图引擎不可知的,可以移植到你喜欢的任何其他视图引擎,而第二种是Razor特定的,如果明天微软发明Blade视图引擎,你将不得不重写你的大部分代码.