Hal*_*him 22 asp.net-mvc view base asp.net-mvc-4
我从以下链接中读到了一条关于在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>
Run Code Online (Sandbox Code Playgroud)
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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
局部视图
@model TopMenuModel
<div class="topMenu">
@MyProperty
</div>
Run Code Online (Sandbox Code Playgroud)
但在我读过的帖子中,没有关于@inherits
关键字的说明.是否有任何我想念的东西或任何方式使@inherits
所有页面中没有关键字的工作?
解决了:
web.config
root
目录中的文件不正确.我web.config
在View
目录下的文件中更改了基类型并修复了它.
Dar*_*rov 28
为什么你展示了两个版本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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
<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>
Run Code Online (Sandbox Code Playgroud)
现在在您的视图中,您将能够使用该属性:
@model TopMenuModel
<div class="topMenu">
@MyProperty
</div>
Run Code Online (Sandbox Code Playgroud)
更新:
一步一步设置:
添加自定义基本视图:
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()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)设置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>
Run Code Online (Sandbox Code Playgroud)内部~/Views/Home/Index.cshtml
使用属性:
<div>
@MyProperty
</div>
Run Code Online (Sandbox Code Playgroud)点击Ctrl+F5运行该应用程序,如果一切顺利,您将收到一个Hello World
.
您遇到的问题是因为您需要修改VIEWS文件夹的web.config文件.所以基本上这一行:
<pages pageBaseType="[MyNamespace].WebViewPageBase">
Run Code Online (Sandbox Code Playgroud)
需要在您的views文件夹中的web.config中,而不是主项目的web.config.Darin Dimitrov的回答明确指出,但人们通常会忽略这一细节.我知道因为我是其中之一.实际上Phil Haack的文章也是如此......
归档时间: |
|
查看次数: |
14597 次 |
最近记录: |