如何从"模板化"中访问MVC中的静态自定义助手? @帮手?

时间:2015-03-25 14:40:36

标签: c# asp.net-mvc asp.net-mvc-5

我有一个在静态类中定义的自定义帮助器方法,如下所示:

namespace MyProject.Helpers
{
    public static class MyHelpers
    {
        public static MvcHtmlString TestData(this HtmlHelper helper,    Guid controlId)
        {
            return MvcHtmlString.Create(string.Format("<div>Test Data: {0}</div>", controlId.ToString()));
        }
    }
}

我想在另一个被定义为cshtml模板的帮助器中使用这个帮助器,如下所示:

@using System.Web.Mvc
@using MyProject.Helpers

@helper PanelHelper(ADOR.CMSWeb.Data.CMSControl control)
{
    <div>
    @Html.TestData(Guid.NewGuid())
    </div>
}

这不起作用。我无法从cshtml帮助程序中访问Html帮助程序。我尝试过使用System.Web.Mvc.HtmlHelper,但我的扩展方法不在该类上。

有谁知道如何从cshtml Helper中访问静态助手来完成我想要做的事情?看起来应该很容易。

感谢。

1 个答案:

答案 0 :(得分:1)

由于这个原因和其他原因,我个人不是@helper的粉丝。将助手更改为部分视图可以解决问题。

另一种解决方案是将HtmlHelper作为另一个参数添加到PanelHelper

或者您可以创建PanelHelper扩展方法并使用TagBuilder创建您的Html。

(我强烈建议您使用TagBuilder代替string.Format来创建Html。它可以更严格的格式创建html,并且unit-tested my Microsoft