我从下面的链接读到了一篇关于更改 MVC 上的基本视图类型的文章:
http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx
我按照说明进行操作,但我的页面仍然继承自System.Web.Mvc.WebViewPage
。我无法访问自定义视图库中定义的任何属性,并且在运行时收到错误。当我使用@inherits
关键字,它修复了。
网页配置
<pages pageBaseType="[MyNamespace].WebViewPageBase">
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
Web视图页面库
public class WebViewPageBase : WebViewPage
{
public SomeType MyProperty { get; set; }
public override void InitHelpers()
{
base.InitHelpers();
MyProperty = { foo };
}
public override void Execute()
{
}
}
public class WebViewPageBase<T> : WebViewPage<T>
{
public SomeType MyProperty { get; set; }
public override void InitHelpers()
{
base.InitHelpers();
MyProperty = { foo };
}
public override void Execute()
{
}
}
局部视图
@model TopMenuModel
<div class="topMenu">
@MyProperty
</div>
但在我读过的帖子中没有关于@inherits
关键词。有什么我想念的东西或者有什么方法可以让这个工作没有@inherits
所有页面中的关键字?
SOLVED:
web.config
文件输入root
目录不正确。我改变了基本类型web.config
文件下View
目录并修复。
为什么你展示了两个版本WebViewPageBase
: 通用和非通用?
您只需要通用版本:
public class MyWebView<T> : WebViewPage<T>
{
public SomeType MyProperty { get; set; }
public override void InitHelpers()
{
base.InitHelpers();
MyProperty = new SomeType();
}
public override void Execute()
{
}
}
进而:
<pages pageBaseType="MvcApplication1.WebViews.MyWebView">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
现在在您的视图中您将能够使用该属性:
@model TopMenuModel
<div class="topMenu">
@MyProperty
</div>
UPDATE:
逐步设置:
- 使用 Internet 模板创建新的 ASP.NET MVC 3 应用程序
-
添加自定义基础视图:
namespace MvcApplication1
{
public class MyWebView<T> : WebViewPage<T>
{
public string MyProperty { get; set; }
public override void InitHelpers()
{
base.InitHelpers();
MyProperty = "Hello World";
}
public override void Execute()
{
}
}
}
-
Set the pageBaseType
属性在~/Views/web.config
(不要与~/web.config
):
<pages pageBaseType="MvcApplication1.MyWebView">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
-
Inside ~/Views/Home/Index.cshtml
使用该属性:
<div>
@MyProperty
</div>
Hit Ctrl+F5 to run the application and if everything goes well you will be greeted with a Hello World
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)