MVC HTML Helper自定义命名空间

时间:2011-02-19 18:45:03

标签: .net asp.net asp.net-mvc html-helper

我如何创建这样的东西:Html.MyApp.ActionLink()? 感谢。

1 个答案:

答案 0 :(得分:7)

你不能这样做。您可以添加到Html类的唯一方法是通过扩展方法。您无法添加“扩展属性”,这是您使用Html.MyApp所需的内容。你最接近的是Html.MyApp().Method(...)

您最好的选择可能是将它们作为Html的扩展方法包含在内,或者完全创建一个新类(例如。MyAppHtml.Method(...)MyApp.Html.Method(...))。最近有一篇博客文章专门展示了这些方法的“Html5”课程,但不幸的是我的谷歌技能让我失望了,我找不到它:(

在评论

中添加了2011年10月13日

要执行Html.MyApp().ActionLink()之类的操作,您需要在HtmlHelper上创建一个扩展方法,该方法使用您的自定义方法返回类的实例:

namespace MyHelper
{
    public static class MyHelperStuff
    {
        // Extension method - adds a MyApp() method to HtmlHelper
        public static MyHelpers MyApp(this HtmlHelper helper)
        {
            return new MyHelpers();
        }
    }

    public class MyHelpers
    {
        public IHtmlString ActionLink(string blah)
        {
            // Wrap the html in an MvcHtmlString otherwise it'll be HtmlEncoded and displayed to the user as HTML :(
            return new MvcHtmlString(string.Format("<a href=\"#\">{0}</a>", HttpUtility.HtmlEncode(blah)));
        }
    }
}

注意:您需要在Web.config中导入此类所在的命名空间,如下所示:

<?xml version="1.0"?>
<configuration>
    <system.web.webPages.razor>
        <pages>
            <namespaces>
                <add namespace="MyHelper"/>
            </namespaces>
        </pages>
    </system.web.webPages.razor>
</configuration>