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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 更改MVC4上的基本视图类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了关于从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。

猜你在找的asp.Net相关文章