【发布时间】:2009-07-14 02:05:13
【问题描述】:
是否可以向 ViewPage 类添加自定义帮助对象,以便我可以在视图页面标记中使用它(就像 Html、Url 和 Ajax 一样)?这个帮助对象还需要来自自定义控制器的一些数据。 (我认为应该可以通过 ViewContext 属性实现)
【问题讨论】:
标签: asp.net-mvc
是否可以向 ViewPage 类添加自定义帮助对象,以便我可以在视图页面标记中使用它(就像 Html、Url 和 Ajax 一样)?这个帮助对象还需要来自自定义控制器的一些数据。 (我认为应该可以通过 ViewContext 属性实现)
【问题讨论】:
标签: asp.net-mvc
创建新类,从 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;
}
}
【讨论】:
CustomViewPage而不是普通的ViewPage
ViewMasterPage。
您可以使用扩展方法(现在在 .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 类.
【讨论】:
<%=Page.DoSomething("input")%> 是否有效,因为它是ViewPageExtension?