【问题标题】:Alternatives to ASCX User Control without a server-side form?没有服务器端表单的 ASCX 用户控制的替代方案?
【发布时间】:2010-05-05 15:17:18
【问题描述】:

我有一个 ASP.NET 3.5 Web 窗体应用程序,其中需要在几个不同的页面之间复制大量代码。听起来像是用户控制权的理想人选?问题是,这不能包含在 <form runat="server"> 中,因为它包含它自己的客户端形式。

没有runat=server 控件或回发或任何真正需要该网络表单的东西- 将其视为带有一些基本<% %> 标记的HTML 块。我只想在控件加载时设置一个属性,以便它知道要输出什么。这纯粹是为了使代码更易于维护的练习。

在我使用 oldskool <!--#include--> 之前,有没有更好的方法?

【问题讨论】:

  • 你不能把它放到你的母版页吗?
  • 不。它仅由某些内容页面使用,并非所有这些内容页面都使用相同的母版页。

标签: asp.net user-controls webforms


【解决方案1】:

您仍然可以使用普通用户控件。只是不要依赖视图状态和回发,你不应该有任何问题。

【讨论】:

    【解决方案2】:
    <%=Response.Write(File.ReadAllText(Server.MapPath("~/includes/filename.ext")))%>
    

    无论如何,都是这样的。

    编辑:与服务器端包含相同的功能,但如果我没记错的话,启用 SSI 语法需要更改 IIS,而这不会。

    编辑 2:我没有看到您的包含包含 asp.net 代码的注释。这显然只适用于客户端代码。我的错。

    【讨论】:

      【解决方案3】:

      您可以拥有任意数量的表单控件,但只有一个可以拥有 runat="server"。

      其他一些技巧:

      http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx

      http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx

      【讨论】:

        【解决方案4】:

        我还是让它成为一个控件。 的东西可以是标签/文字以获得更大的灵活性,一旦你说不需要回发,你就会需要它们。最好现在设置其他页面以将其作为控件包含在内,以便以后更轻松地进行更改。哎呀——你甚至可以利用控制级缓存!

        【讨论】:

        • 在这个项目中,标签和文字实际上不太灵活,因为我们在 UI 中大量使用了 Javascript。还应该提到,我们正在缓慢迁移到 MVC,因此我们尽量不依赖回发。
        • @n8wrl,标签如何比 更灵活?
        • @Mattias:因为您的代码隐藏可以对标签中的内容进行更多验证。如果该内容依赖于某个为 NULL 或其他无效的对象怎么办?在 内部验证更难/更混乱
        • 您仍然可以在代码后面(或任何地方)执行逻辑,并在使用代码块时仅写入值。没有不同。我更喜欢代码块,因为我认为它看起来更干净。
        猜你喜欢
        • 2015-06-18
        • 1970-01-01
        • 2014-04-15
        • 2010-10-18
        • 1970-01-01
        • 2022-08-12
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多