在视图代码中更改Razor视图的基类

6
请注意,这不是一个重复的问题。我知道我们可以在视图/ web.config的razor部分中指定基本视图类型。但是我希望我的view1,view2从baseviewA继承,而view3,view4从baseviewB继承。在razor中如何做到这一点,就像在ASPX引擎中一样:
<%@ Page Language="C#" Inherits="Test.Myproject.Web.Mvc.ViewBase" %>
<%@ Control Language="C#" Inherits="Test.Myproject.Web.Mvc.PartialViewBase" %>

编辑 我不关心模型。在我的问题中,baseviewA和baseviewB是完全不同的类。


https://dev59.com/q2865IYBdhLWcg3wIrFg - Code Jammr
@CodeJammr:这会改变视图的所有基类。我想要几个不同的基类。 - Cheng Chen
2个回答

9
你可以使用@inherits关键字更改Razor中的基类,你的基类只需要派生自System.Web.Mvc.WebViewPage
所以你的示例: <%@ Page Language="C#" Inherits="Test.Myproject.Web.Mvc.ViewBase" %> 将会变成 @inherits Test.Myproject.Web.Mvc.ViewBase 其中
public class Test.Myproject.Web.Mvc.ViewBase : System.Web.Mvc.WebViewPage
{
}

在Razor中是否可以使用<%语法而不是@ - Zain Shaikh
@ZainShaikh,不支持在Razor中使用<%,只能在aspx页面中使用。您对使用@符号有什么问题? - nemesv
也许我应该为此发布一个单独的问题,但我们还是继续吧。我有一个模板文件,我使用客户端JavaScript(underscore)库来构建用户界面。我想使用razor引擎或其他比razor更好的引擎从服务器端呈现相同的模板文件。 - Zain Shaikh

2

Inherits指定了视图中要使用的模型类型。在Razor中也可以执行相同的操作。

<%@ Page Language="C#" Inherits="Test.Myproject.Web.Mvc.ViewBase<Test.Models.MyModel>" %

在Razor中,相当于以下内容

@model Test.Models.MyModel

这在视图和局部视图中是相同的,因此
<%@ Control Language="C#" Inherits="Test.Myproject.Web.Mvc.PartialViewBase<Test.Models.MyModelB>" %>

等同于

@model Test.Models.MyModelB

没有模型业务。我只想改变视图的基类。 - Cheng Chen
1
好的,那么唯一的方法就是将你的视图保存在不同的文件夹中,并在每个你想覆盖的文件夹中拥有一个web.config。 - Manas
你确定每个视图文件夹中可以有几个 web.config 文件,会“覆盖”基本的“view/”文件夹中的配置吗? - Cheng Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接