类似的母版页,DRY的最佳方式

本文关键字:最佳 方式 DRY 母版页 | 更新日期: 2023-09-27 17:59:49

我有两个类似的母版页,基本上它们非常广泛,但区别在于其中一个使用

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。主

Shared.master将具有从Regular继承的内部内容。Master,如果它需要另一个表单控件,那么它会选择另一个Master(它对FormContent具有相同的ContentPlaceHolderID),动态地使用类似的东西,可能是从web.config或类似的中读取

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

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

我提出的解决方案是,我在给定的"App_Shared"文件夹中有这四个母版页文件,该文件夹通过svn:externals从所有项目中引用,所以我不必重复代码。这个想法是我选择是否共享。Master(它将是所有三个应用程序的函数基母版页文件)在当前应用程序中使用常规窗体或用户控件,并且可以通过应用程序的web.config中的设置进行选择。

类似的母版页,DRY的最佳方式

在母版页代码中,您应该能够覆盖OnInit(或OnLoad或任何其他位置),并确定何时需要多部分加密,当需要时,请调用:

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

更好:

暴露布尔属性:

public bool EncodeMe {get;set;};

在使用主控制集的每个表单中

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

则在母版页中使用bool来确定是否进行编码。