使用自定义帮助程序对象扩展Viewpage类?

时间:2009-07-14 02:05:14

标签: asp.net-mvc

是否可以向ViewPage类添加自定义帮助器对象,因此我可以在视图页面标记中使用它(就像Html,Url和Ajax一样)?此辅助对象还需要来自自定义控制器的一些数据。 (这应该可以通过我认为的ViewContext属性)

2 个答案:

答案 0 :(得分:5)

创建新类,从System.Web.Mvc.ViewPage派生它,为自定义助手添加新属性并覆盖InitHelpers()方法。例如:

public class CustomViewPage : System.Web.Mvc.ViewPage
{
    public YourCustomHelper CustomHelper
    {
        get;
        set;
    }

    public virtual void InitHelpers()
    {
        CustomHelper = new YourCustomHelper(ViewContext);

        base.InitHelpers();
    }
}


public class YourCustomHelper
{
    public YourCustomHelper(ViewContext viewContext)
    {
        if (viewContext == null) {
            throw new ArgumentNullException("viewContext");
        }

        ViewContext = viewContext;
    }

    public ViewContext ViewContext
    {
        get;
        private set;
    }
}

答案 1 :(得分:1)

您可以使用扩展方法轻松完成此操作(现在可在.Net 3.5中使用)考虑这样的类:

public static class ViewPageExtensions
{
    public static string DoSomething(this ViewPage page, string input)
    {
        // Do something clever with the page
    }
}

只要您在正在使用的ViewPage.aspx上导入的命名空间可以看到ViewPageExtensions类,就应该可以直接访问DoSomething方法,而无需引用到ViewPageExtensions类。