【问题标题】:Strongly-typed ASCX in WebForms 3.5?WebForms 3.5 中的强类型 ASCX?
【发布时间】:2010-11-08 16:15:30
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 听起来您正在尝试弯曲 Web 表单。就个人而言,在做 Web 表单时,我以 Web 表单的方式来做事——即使用文件后面的代码。在做 ASP.NET MVC 时,我以 MVC 的方式做事。试图将一个弯曲成另一个是自找麻烦。
  • 在某种程度上我正在尝试弯曲 WebForms,但如果可以摆脱不必要的文件,我认为这不是太多要求。尤其是当我已经看到在非常相似的上下文中工作的语法非常适合时,如果没有它可用,那就太令人沮丧了。

标签: asp.net generics user-controls webforms strong-typing


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    使用 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 -->
    <% } %>
    

    【讨论】:

    • 抱歉,我的问题可能不清楚,但我已经有一个 DataTemplate : UserControl 类,我试图在自定义 ASCX 中使用,并避免使用部分类。
    • 啊,但是为什么还要保留任何 WebForms 的东西呢?为什么不选择 MVC,因为如果没有 VS 生成部分类,您将无法使用任何 WebForms 组件?
    • 这是一个现有的 WebForms 应用程序,我正在尽可能地整理它,因此我无法更改整个架构。大多数前端生成都是抽象的,所以我唯一需要担心的是维护 MasterPages 和这些需要的模板,它们不需要任何 WebForms 位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多