Page_Init vs Page_PreRender与渲染LI和CSS冲突

时间:2014-11-06 20:04:48

标签: css asp.net

嗨,谢谢你。

我遇到一个问题,我在页面顶部显示了一些链接(它们不是面包屑),对于不同的情况,我需要打开/关闭一些,而用户所在的页面则突出显示那个链接。当我最初将页面放在一起时,对显示链接的函数的调用在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(会话)移动到Page_PreRender函数,以便在页面保存后,会话更新时调用它们,但现在我已经完成了使标签为蓝色的功能不再具有效果。我已经阅读了关于页面生命周期的内容,我认为在makeTabBlue中呈现的CSS仅在Page_PreInit或Page_Init循环期间有效,但如果我将makeTabBlue移动到其中任何一个,那么页面开始抛出控件可能出现的其他错误'找到它是有道理的,因为它们直到PreRender才被调用。在保存功能中调用它也没有任何效果。我应该在哪里调用makeTabBlue以使其正常工作?

更新:

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

1 个答案:

答案 0 :(得分:1)

上次您可以对页面执行某些操作位于Page_LoadComplete()(PreRender之前的方法)方法上。如果您在此处执行此操作,则对标记的更改仍将生效。这应该允许你在你的init中运行一些代码,然后在以后继续运行,同时仍然影响前端。

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

protected string TabColour = "some default colour";

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

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

上面的div示例是您的标签。

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