C# 动态切换样式表

C# 动态切换样式表,c#,css,asp.net,C#,Css,Asp.net,我的任务是把两页合并成一页。我使用ASP.NET。加载时,我必须选择一个.css,一个业务对象,并在asp:updatePanel中填充数据。两个站点都应该显示来自两个不同设备的日志 据我所知,我应该切换页面加载中的所有内容 我试图同时选择Page_PreInt和Page_Load中的css文件,但这两种方法都不起作用: protected void Page_PreInit(object sender, EventArgs e) { // seting the mas

我的任务是把两页合并成一页。我使用ASP.NET。加载时,我必须选择一个.css,一个业务对象,并在asp:updatePanel中填充数据。两个站点都应该显示来自两个不同设备的日志

据我所知,我应该切换页面加载中的所有内容

我试图同时选择Page_PreInt和Page_Load中的css文件,但这两种方法都不起作用:

protected void Page_PreInit(object sender, EventArgs e)
    {

        // seting the master page
        switch (deviceOrTerminal) 
        {
            case DeviceOrTerminalEnum.Device:
                this.Master.MasterPageFile = "~/Device/Device.Master";
                Session.Add("style", "/Theme/DeviceEventHistory.css");
                lnkCSS.Attributes["href"] = "/Theme/DeviceEventHistory.css";
                lnkCSS.Attributes["href"] = "~/Theme/DeviceEventHistory.css";
                break;
            case DeviceOrTerminalEnum.Terminal:
                this.Master.MasterPageFile = "~/Terminal/TerminalDetail.Master";
                Session.Add("style", "/Theme/TerminalEventHistory.css");
                lnkCSS.Attributes["href"] = "/Theme/TerminalEventHistory.css";
                lnkCSS.Attributes["href"] = "~/Theme/TerminalEventHistory.css";
                break;
            case DeviceOrTerminalEnum.None:
                this.Master.MasterPageFile = "~/Main.Master";
                Session.Add("style", "/Theme/NoneEventHistory.css");
                lnkCSS.Attributes["href"] = "/EventHistory/Theme/NoneEventHistory.css";
                lnkCSS.Attributes["href"] = "~/EventHistory/Theme/NoneEventHistory.css";
                break;
        }
    }`


protected void Page_Load(object sender, EventArgs e)
    {
        CommandBarTop.TitleCaption = TitleCaption;
        CommandBarGridTop.DisableAllButtons();
        CommandBarGridBottom.DisableAllButtons();
        CommandBarTop.DisableAllButtons();
        CommandBarBottom.DisableAllButtons();
        CommandBarBottom.SetSearchMode(eventHistoryBo.PermissionId);
        CommandBarBottom.SearchClicked += CommandBar_SearchClicked;
        CommandBarBottom.SearchButtonText = (String)GetLocalResourceObject("CommandBar.SearchButton");
        CommandBarTop.SetSearchMode(eventHistoryBo.PermissionId);
        CommandBarTop.SearchClicked += CommandBar_SearchClicked;
        CommandBarTop.SearchButtonText = (String)GetLocalResourceObject("CommandBar.SearchButton");
        String shortDatePattern = PreferredBrowserLanguage.DateTimeFormat.ShortDatePattern;
        String shortTimePattern = PreferredBrowserLanguage.DateTimeFormat.ShortTimePattern;
        txtEventTimeFrom.CalendarDateFormat = shortDatePattern + " " + shortTimePattern;
        txtEventTimeTo.CalendarDateFormat = shortDatePattern + " " + shortTimePattern;

        String jsValidatorName = "clientValidate";
        Type jsType = GetType();
        if (!Page.ClientScript.IsClientScriptBlockRegistered(jsValidatorName))
        {
            Initialize();
            if (!Page.IsPostBack)
            {
                if ((!TMSPrincipal.IsPermissionOk(deviceBo.PermissionId, EnumPermissionType.View))
                   || (!TMSPrincipal.IsPermissionOk(terminalBo.PermissionId, EnumPermissionType.View)))
                {
                    throw new HttpException("Insufficient permissions to view details.");
                }

                switch (deviceOrTerminal) 
                {
                    case DeviceOrTerminalEnum.Device:
                        CommandBarTop.TitleCaption.Replace(CommandBarTop.TitleCaption.ToString(), "Device");
                        CommandBarGridTop.TitleCaption = "Device";
                        lnkCSS.Attributes["href"] = "/Theme/DeviceEventHistory.css";
                        lnkCSS.Attributes["href"] = "~/Theme/DeviceEventHistory.css";
                        break;
                    case DeviceOrTerminalEnum.Terminal:
                        CommandBarTop.TitleCaption.Replace(CommandBarTop.TitleCaption.ToString(), "Terminal");
                        CommandBarGridTop.TitleCaption = "Terimal";
                        lnkCSS.Attributes["href"] = "/Theme/TerminalEventHistory.css";
                        lnkCSS.Attributes["href"] = "~/Theme/TerminalEventHistory.css";
                        break;
                    case DeviceOrTerminalEnum.None:
                        CommandBarTop.TitleCaption.Replace(CommandBarTop.TitleCaption.ToString(), " ");
                        UserHints.Add(new UserHint(GetLocalResourceObject("Error_DeviceNorTerminal_Title.Text").ToString(), GetLocalResourceObject("Error_DeviceNorTerminal_Body.Text").ToString(), EnumUserHintType.Error));
                        lnkCSS.Attributes["href"] = "/EventHistory/Theme/NoneEventHistory.css";
                        lnkCSS.Attributes["href"] = "~/EventHistory/Theme/NoneEventHistory.css";
                        break;
                }

                txtEventTimeFrom.Text = DateTime.Now.Date.AddDays(-7).ToString("g");
                txtEventTimeTo.Text = DateTime.Now.Date.AddDays(1).ToString("g");
                FillData();
                InitializeDropDownEventType();
            }
        }
    }
我正在为这种ASP.NET编写一个月的程序(在我使用MVC和Razor之前),所以如果有任何问题,我都会心存感激。我知道有一些simmullar问题,但没有一个能解决我的问题。

我做了一个简单的测试:

MasterA.Master

...
 <h1>Master A</h1>
...
...
 <h1>Master B</h1>
...
Page.aspx


,在页面的
PreInit
事件中动态更改母版页

现在,CSS

如果您要更改母版页,为什么不在母版页本身中编写正确的CSS文件,而您所需要做的只是切换母版页

如果只切换母版页,则可以使用
视图切换器
编写脚本,因为WebForms在切换不同设备的母版页时会使用此脚本

在VisualStudio中启动一个全新的WebForms项目,并查看它们如何使用文件
ViewSwitcher.ascx


为什么您要在
案例的每个分支中设置
href
两次?我认为这些都可以,但没有。看看这个问题
public partial class Page : System.Web.UI.Page
{
    protected void Page_PreInit(object sender, EventArgs e)
    {
        var letter = HttpContext.Current.Request["m"] != null ?
                     HttpContext.Current.Request["m"] : "A";
        this.MasterPageFile = "~/Master" + letter + ".Master";
    }
}
<%@ Page Title="" Language="C#" 
    MasterPageFile="~/MasterA.Master" 
    AutoEventWireup="true" 
    CodeBehind="Page.aspx.cs" 
    Inherits="WebAppWebForms.Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <h3>Content</h3>
    <p>Content of the page</p>
</asp:Content>