我已经阅读了关于从MVC中更改基本视图类型的文章:
http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx
我遵循说明,但我的页面仍然继承自System.Web.Mvc.WebViewPage。我无法访问我的自定义视图库中定义的任何属性,并在运行时发现错误。当我使用@inherits关键字时,它会修复。
Web.config文件
<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>
WebViewPageBase
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关键字在所有页面?
解决了:
解决方法
为什么显示两个版本的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>
更新:
一步一步的设置:
>使用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() { } } }
>在〜/ Views / web.config中设置pageBaseType属性(不要与〜/ 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>
>里面〜/ Views / Home / Index.cshtml使用属性:
<div> @MyProperty </div>
>按Ctrl F5运行应用程序,如果一切顺利,您将会遇到一个Hello World。