一般遗传 ViewPage<> 和一个新的财产
安装:
CustomViewEngine
CustomController 根据
CustomViewPage Base /此数据库添加了新属性。 "MyCustomProperty"/
问题:
什么时候 view 例如,严格输入:
, 我得到一个编译错误 "Parser", 批准 MyCustomProperty 不是公共财产 System.Web.Mvc.ViewPage
我做了很多样品和错误 /见下文/, 要查看导致此错误的原因,并提出以下结论:
仅在我声明时发生错误 "MyCustomProperty" 或指令中的任何其他财产 @Page view.
错误将始终显示 "System.Web.Mvc.ViewPage", 而不是宣布的课程 inherits="..".
</mycustomobject">
CustomViewEngine
CustomController 根据
CustomViewPage Base /此数据库添加了新属性。 "MyCustomProperty"/
问题:
什么时候 view 例如,严格输入:
<@ Page Inherits="CustomViewPage<mycustomobject" mycustomproperty="Hello">
, 我得到一个编译错误 "Parser", 批准 MyCustomProperty 不是公共财产 System.Web.Mvc.ViewPage
我做了很多样品和错误 /见下文/, 要查看导致此错误的原因,并提出以下结论:
仅在我声明时发生错误 "MyCustomProperty" 或指令中的任何其他财产 @Page view.
错误将始终显示 "System.Web.Mvc.ViewPage", 而不是宣布的课程 inherits="..".
</mycustomobject">
没有找到相关结果
已邀请:
1 个回复
石油百科
赞同来自:
找到了另一种方法来做到这一点,至少在较新的版本中看起来更容易 ASP.NET MVC. /在下面复制他的评论
/
我不确定这是新的 ASP.NET MVC 3, 但是当我更改了属性时
Inherits 参考文献 generic 在语法中 C# 在
句法 CLR, 标准
正确分析了通用 --
不需要
. 使用justin的例子,这
意味着交换
到
原始答案较低
:
OK, 我解决了这个问题。 这是一个令人迷人的运动,解决方案是非激动的,但一旦你第一次制作工作,就不会太困难。
这是主要问题:解析器 ASP.NET 页面不支持泛型作为页面类型。
方法 ASP.NET MVC 它是为了解决这个问题是欺骗基本页面分析仪,强迫他认为页面并不普遍。 他们通过建设来做到这一点 custom
http://msdn.microsoft.com/en-u ... .aspx
和 custom
http://msdn.microsoft.com/en-u ... .aspx
. 解析器过滤器正在寻找通用类型,如果他发现它,则不会使其更改为Universal类型 ViewPage, 解析器。 ASP.NET 没有选择。 然后,在汇编页面的生命周期之后,他们的用户类 Page builder 一般类型再次变为变化。
它是因为类型 generic ViewPage 源自类型 non-generic ViewPage, 以及指令中指定的所有有趣属性 @Page, 存在于基本课程中 /non-generic/. 因此,实际上,当在指令中指定属性时 @Page, 检查这些属性是否符合非标准基类。 ViewPage.
在任何情况下,它在大多数情况下都能很好,但不是在你的情况下,因为他们很难编码 ViewPage 与其实现页面过滤器的通用基本类型一样,不提供更改它的简单方法。 这就是你继续看到的原因 ViewPage 在他的错误消息中,由于何时发生错误 ASP.NET 更改占聚合 ViewPage, 当他改变普通的地方 ViewPage 在汇编之前。
纠正是为了创建以下内容的自己版本:
Pareraser过滤页面 - 这几乎是一个精确的副本 ViewTypeParserFilter.cs 在源头 MVC, 唯一的区别,他指的是您的自定义类型 ViewPage 和 Page builder 反而 MVC
Page 建设者是相同的 ViewPageControlBuilder.cs 在源头 MVC, 但他把课程放在自己的命名空间中,而不是在他们身上。
制作您的用户类 viewpage 直接从 System.Web.Mvc.ViewPage /没有通用版本/. 将任何用户属性附加到此新的非通用类。
输出普遍等级 #3,, 从实现中复制代码 ViewPage 来源 ASP.NET MVC.
重复 #2, #3, 和 #4 对于用户控件 /@Control/, 如果还需要指令控制指令的自定义属性。
然后你需要改变 web.config 在表示目录中 /但不是 web.config 基本应用程序/, 使用这些新类型 MVC 默认。
我附上了一些代码的例子,说明它是如何工作的。 非常感谢Fila Haak,谁帮助我了解它,虽然我也必须在源代码中挖很多 MVC 和 ASP.NET, 真正了解它。
首先,我会开始 web.config 所需的更改 web.config:
现在这里是Pages解析器过滤器 /#1 更高/:
这是一个班级 Page builder /#2 更高/:
但用户类的页面 view: 非门底座 /#3 更高/ 和一般衍生类 /#4 更高/:
但是用户控件的相应类 /#5 更高/ :
最后,这是一个例子 View, 这在行动中显示:
</mvcapplication1.models.foomodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></tmodel></t></tmodel></pages></mvcapplication1.models.foomodel>