加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 更改MVC4上的基本视图类型

发布时间:2020-12-16 00:47:01 所属栏目:asp.Net 来源:网络整理
导读:我已经阅读了关于从MVC中更改基本视图类型的文章: http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx 我遵循说明,但我的页面仍然继承自System.Web.Mvc.WebViewPage。我无法访问我的自定义视图库中定义的任何属性,并在运行
我已经阅读了关于从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关键字在所有页面?

解决了:

根目录中的web.config文件不是正确的。我更改了在web目录下的web.config文件中的基本类型,它修复了。

解决方法

为什么显示两个版本的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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读