c# - 类似的母版页,DRY 的最佳方式?

标签 c# asp.net master-pages

我有两个相似的母版页,基本上它们都相当广泛,但区别在于一个使用

common content

<form id="form1" runat="server" enctype="multipart/form-data">
    common content
</form>

common content

还有一个

common content

<dn:Form id="form1" runat="server">
    common content
</dn:Form>

common content

我想知道我如何才能做到这一点,而不必创建两个母版页,只需更改表单标签...

我目前的做法基本上是有一个母版页和其他内容,第二个母版页有内部内容,另外两个只有表单标签和占位符,然后动态选择一个主页放在另一个主页上。

是否有更好的方法或者这是正确的方法?谢谢。

更新:我不确定我当前的想法是否表达得很好:

Base.master 将具有外部内容,没有继承。

Regular 和 Modified.master 会有不同的表单标签,它们都继承自 Base.Master

Shared.master 将拥有内部内容,从 Regular.Master 继承,如果它需要其他表单控件,则它选择另一个主控(它具有相同的 ContentPlaceHolderID for FormContent), 动态地用这样的东西,也许从 web.config 或类似的东西读取

    protected void Page_PreInit(object sender, EventArgs e)
    {
        this.MasterPageFile = "~/App_Shared/RegularWebForm.Master";
        this.MasterPageFile = "~/App_Shared/UrlRewritableWebForm.Master";
    }

这样做的目标是能够在同一个 Web 域的三个不同应用程序中使用同一个母版页。

我提出的解决方案的想法是,我将这四个母版页文件放在给定的“App_Shared”文件夹中,所有项目都通过 svn:externals 引用该文件夹,因此我不必重复代码。我的想法是,我选择 Shared.Master(这将是所有三个应用程序的功能基础母版页文件)是使用常规表单还是当前应用程序中的用户控件,并且可以通过应用程序的 web.config。

最佳答案

在后面的母版页代码中,您应该能够覆盖 OnInit(或 OnLoad 或任何其他地方)并确定何时需要多部分加密,以及何时需要调用:

Attributes.Add("enctype", "multipart/form-data");

更好的是:

公开一个 bool 属性:

public bool EncodeMe {get;set;};

在每个使用主控集的窗体中

Master.EncodeMe = true; // or false of course

然后在master page中使用bool来判断是否编码。

关于c# - 类似的母版页,DRY 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416395/

相关文章:

c# - 无法添加对已安装 NuGet 包的引用?

c# - Google API v3 - 无法获取日历列表

asp.net - 如何最好地在 ASP.NET 中填充 HTML 表?

asp.net - 使用 ASP.NET 母版页复制标题标签

c# - MVVM交叉特征

c# - XML 序列化不会写出延迟评估的属性

c# - 将列表框项目转换为数组整数 C#

c# - "The process can not access the file ' ... ' because it is being used by another process"重新创建临时文件以使用 FtpWebRequest 上传

css - 不同颜色的飞出菜单

c# - 从代码隐藏更改母版页上的 DIV 标签高度