嗨,谢谢你。
我遇到一个问题,我在页面顶部显示了一些链接(它们不是面包屑),对于不同的情况,我需要打开/关闭一些,而用户所在的页面则突出显示那个链接。当我最初将页面放在一起时,对显示链接的函数的调用在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加载时检查该字段。
答案 0 :(得分:1)
上次您可以对页面执行某些操作位于Page_LoadComplete()
(PreRender之前的方法)方法上。如果您在此处执行此操作,则对标记的更改仍将生效。这应该允许你在你的init中运行一些代码,然后在以后继续运行,同时仍然影响前端。
另一个选择是在后面的代码中添加一个变量:
protected string TabColour = "some default colour";
然后在前端,执行以下操作:
<div style='color:#<%= TabColour %>'></div>
上面的div示例是您的标签。
这将允许您在prerender事件上设置TabColour
,但在Rendering
事件中评估时仍会在前端显示正确的颜色。我更喜欢这种方法,因为页面生命周期可能很棘手,这可以避免被它约束。