【问题标题】:Page_Init vs Page_PreRender conflict with rendering LI and CSSPage_Init vs Page_PreRender 与渲染 LI 和 CSS 冲突
【发布时间】:2015-01-03 11:43:57
【问题描述】:

您好,在此先感谢您。

我有一个问题,我在页面顶部显示了一些链接(它们不是面包屑),并且在不同的情况下,我需要打开/关闭一些链接,并为用户所在的页面突出显示该链接。当我最初将页面放在一起时,对显示链接的函数的调用在 Page_Init 中,就像在母版页中一样:

protected new void Page_Init(object sender, EventArgs e)
{
    SetTabs(session);
}

protected void SetTabs(session)
{
    makeTab.add(session.param, session.param);
    makeTab.generate();
}

protected void add(param, param)
{
    Tabs.add(new tab() { link = param, name  = param }); 
}

protected void generate()
{
    foreach(tab t in Tabs)
    {
        liTab.Text = string.Format("<li><a href=\"{2}\">{1}</a>", t.name, t.link);
    }
}

创建的链接是内联显示的项目的无序列表。

我有一个单独的方法,它应用样式更改来突出显示与用户所在页面相关联的链接,该链接是从页面本身的 Page_Load 调用的:

protected void Page_Load(object sender, EventArgs e)
{
    Master.makeTabBlue(nameOfTab);
}

但是,为了使隐藏的选项卡正确重新出现,我必须将 SetTabs(session) 移动到 Page_PreRender 函数,以便在保存页面后调用它们,当会话更新但现在我已经完成了使选项卡变为蓝色的功能不再有效。我已经阅读了有关页面生命周期的信息,并且我认为在 makeTabBlue 中呈现的 CSS 仅在 Page_PreInit 或 Page_Init 周期内有效,但是如果我将 makeTabBlue 移动到其中任何一个周期,则页面开始抛出控件可以的其他错误'找不到这是有道理的,因为直到 PreRender 才会调用它们。在保存函数中调用它也没有效果。我应该从哪里调用 makeTabBlue 才能正常工作?

更新:

在这种特殊情况下,我的问题的解决方案是将 SetTabs 保留在 Page_Init 中,将 makeTabBlue 保留在 Page_Load 中,我向 LI 添加了一个独特的类,我正在隐藏,通过 javascript 通过将值存储在中来显示链接一个隐藏字段并在 js 加载时检查该字段。

【问题讨论】:

    标签: css asp.net


    【解决方案1】:

    最后一次您可以对页面执行操作是在 Page_LoadComplete()(PreRender 之前的那个)方法上。如果您在此处执行,对标记的更改仍将生效。这应该允许您在 init 中运行一些代码,然后在稍后运行一些东西,同时仍然影响前端。

    另一种选择是在后面的代码中添加一个变量:

    protected string TabColour = "some default colour";
    

    然后在前端,执行如下操作:

    <div style='color:#<%= TabColour %>'></div>
    

    上面的 div 示例是您的选项卡。

    这将允许您在预渲染事件上设置TabColour,但仍会在前端显示正确的颜色,因为它在Rendering 事件中被评估。我更喜欢这种方法,因为页面生命周期可能很棘手,这避免了受它的限制。

    【讨论】:

    • 这是否意味着我应该尝试将 SetTabs 移动到 Page_LoadComplete 或 makeTabBlue?目前 SetTabs 在 PreRender 中,因此移动 makeTabBlue 在 Page_LoadComplete 中不起作用,因为它仍然在 PreRender 之前。
    • @ElaineK - 查看我的编辑,这可能是您更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2014-04-27
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多