2

我希望摆脱 WebForms 3.5 应用程序中控件的代码隐藏。再次被 MVC 中如何完成的错误所困扰,我想通过执行以下操作更接近这种方法:

<%@ Control Language="C#" Inherits="Core.DataTemplate<Models.NewsArticle>" %>

这给了我你期望的解析器错误,所以我记得这是一个等待 MVC 预览中修复的问题,并将其更改为:

<%@ Control Language="C#" Inherits="Core.DataTemplate`1[[Models.NewsArticle]]" %>

但这也不起作用!MVC 团队是如何利用这种能力的?MVC 项目类型而不是最新的 VS2008 Service Pack 有什么特别之处吗?

除了放弃并要求未来的模板具有代码隐藏文件之外,我最好的选择是什么让这个尽可能接近通用用户控制方法?

4

2 回答 2

4

好吧,看来我已经成功了。在查看了 MVC 团队实现的 PageParserFilter 之后ViewUserControl<T>,我能够为自己的DataTemplate<T>目的构建类似的东西。甜的。我现在可以使用这条线:

<%@ Control Language="C#" Inherits="Core.DataTemplate<Models.NewsArticle>" %>

而且,文件后面没有任何代码,它会解析!如果我发现我在此过程中破坏了其他东西,我会报告!

于 2009-07-07T15:32:59.620 回答
0

使用 WebForms,您几乎失去了使它们有用的所有东西,而无需页面背后的代码,因为 VS 无法自动生成包含所有runat="server"控件的实际定义的设计器文件。

您可以做的是拥有一个通用的基页类,并使其通用:

public class DataTemplate<T> : Page {
    public T Model {get;set;}
}

public partial class MyCodeBehindClass : 
    DataTemplate<Models.NewsArticle> {
    ...
}

这将允许 WebForms 所做的所有拖放组件的东西不受阻碍地工作,同时还允许您访问页面上的强类型模型:

<%@ Control Language="C#" Inherits="MyCodeBehindClass" %>

<% foreach( var item in Model ) { %>
    <!-- do stuff -->
<% } %>
于 2009-07-07T12:00:59.357 回答