我希望摆脱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是否特别?
没有放弃并要求将来的模板有代码隐藏文件,我最好的选择是尽可能接近通用用户控制方法吗?
答案 0 :(得分:4)
好吧,看起来我已经设法做到了。在查看MVC团队为ViewUserControl<T>
实现的PageParserFilter之后,我能够为自己的DataTemplate<T>
目的构建类似的东西。甜。我现在可以使用这行:
<%@ Control Language="C#" Inherits="Core.DataTemplate<Models.NewsArticle>" %>
并且,没有任何代码隐藏文件,它解析!如果我发现在这个过程中我发现了其他的东西,我会报告回来!
答案 1 :(得分: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 -->
<% } %>