Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 是否使用自定义辅助对象扩展Viewpage类?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 是否使用自定义辅助对象扩展Viewpage类?

Asp.net mvc 是否使用自定义辅助对象扩展Viewpage类?,asp.net-mvc,Asp.net Mvc,是否可以向ViewPage类添加自定义帮助对象,以便在视图页面标记中使用它(就像Html、Url和Ajax一样)?此帮助对象还需要来自自定义控制器的一些数据。(我认为这应该可以通过ViewContext属性实现)创建新类,从System.Web.Mvc.ViewPage派生它,为自定义帮助程序添加新属性并重写InitHelpers()方法。例如: public class CustomViewPage : System.Web.Mvc.ViewPage { public YourCust

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

创建新类,从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;
    }
}

创建新类,从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;
    }
}

你可以很容易地用一个扩展方法(现在在.NET 3.5中可用)来考虑这样的类:

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

只要您的
ViewPageExtensions
类对您正在处理的ViewPage.aspx上导入的名称空间可见,您就应该能够直接访问
DoSomething
方法,而无需引用ViewPageExtensions类。

使用扩展方法可以非常轻松地做到这一点(现在可以在.NET 3.5中)考虑这样的类:

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

只要您的
ViewPageExtensions
类对您正在处理的ViewPage.aspx上导入的名称空间可见,您就应该能够直接访问
DoSomething
方法,而无需参考ViewPageExtensions类。

谢谢eugene,我还创建了一个自定义控制器上下文并访问了它它是这样的:CustomHelper=new YourCustomHelper(ViewContext.Controller.ControllerContext作为CustomControllerContext);+1!这是一个很好的解决方案,可惜它没有被标记为答案,OP关闭了他的帐户…我无法让它工作,是否有什么特别的事情需要做才能使用
CustomViewPage
而不是正常的
ViewPage
为我工作,+1…现在正在寻找扩展
ViewMasterPage
的方法nks eugene,我还创建了一个自定义控制器上下文,并按如下方式访问它:CustomHelper=new YourCustomHelper(ViewContext.controller.ControllerContext作为CustomControllerContext)+1!这是一个很好的解决方案,可惜它没有被标记为答案,OP关闭了他的帐户……我无法让它工作,是否需要做什么特别的事情来使用
CustomViewPage
而不是正常的
ViewPage
为我工作,+1……现在正在寻找扩展
ViewMasterPage
的方法我自己尝试过这一点-理论上很好,但实际上这似乎不起作用。IDE不识别扩展方法。奇怪的是,从您的视图文件中,您可以执行intellisense无法识别的操作,并导致运行时异常。这对
不应该起作用,因为它是
ViewPageExtens吗ion
?我自己也尝试过,理论上很好,但实际上似乎不起作用。IDE不识别扩展方法。奇怪的是,从您的视图文件中,您可以执行intellisense无法识别的操作,并导致运行时异常。这对
来说不应该起作用,因为它是
ViewPageExtension