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