我能像在MVC中那样在Web Forms中重写视图吗?

本文关键字:重写 Forms 视图 Web MVC | 更新日期: 2023-09-27 18:16:59

我通常可以覆盖视图,例如,通过在DisplayTemplates文件夹中放置具有相同名称的视图。如果我想重写图像渲染的方式,我可以把Images.cshtml放在文件夹里。

现在,我想重写在EPiServer中呈现表单的方式。我知道如何在ASP中做到这一点。. NET MVC,但是这个项目使用Webforms。

我已经试着去搜索了,但是关于这个主题的文档似乎很少。在ASP。例如,我可以扩展搜索引擎来搜索特定的位置来查找我的视图,或者将它们放在asp.net。. NET默认看起来。

这在Web表单中似乎不起作用。有人知道怎么做吗?

编辑:EPiServer有一个.ascx文件,它用来渲染一个XForm。我想告诉ASP。. NET使用我的.ascx文件代替。要做到这一点,我需要告诉ASP。. NET查找我的.ascx文件,例如,通过告诉ASP. NET。. NET视图引擎在特定文件夹中查找我的.ascx,或者将其放置在视图引擎默认情况下查找的某个地方。

我该怎么做?

我能像在MVC中那样在Web Forms中重写视图吗?

如果您想替换它的所有地方,只需替换ascx文件。否则,恐怕答案是否定的。默认情况下,Web Forms不会查找文件的替代位置,因为控件通常使用完整路径或类名指定。您想要做的事情相当于c#在找不到类名时寻找替代名称空间。在Web表单中有很多方法可以实现这种行为,比如动态数据,但是ascx控件不是这样的

如果你使用Property web控件来显示值,你可以创建你自己的自定义PropertyControl,并在PropertyControlFactory中为你的类型注册它。这样你就可以控制你的属性如何呈现。

虽然这不允许你直接指向你的。ascx,但如果你愿意,你可以在你的服务器控件中加载它。

有关代码示例和在EPiServer中自定义属性呈现的这种(以及其他一些)方法的总结,请参阅Mathias Kunto的博客文章http://blog.mathiaskunto.com/2012/03/05/being-friends-with-the-propertycontrolclassfactory-or-101-ways-to-change-episerver-built-in-property-appearances/。