我是第一次尝试使用C#的人。我有一个母版页,其中包含以下导航代码,我想根据网页动态更改:
main.master:
...
<ul class="nav-menu">
<li class="active"><a href="#">link A</li>
<li><a href="#">link B</li>
<li><a href="#">link C</li>
</ul>
...
截至目前,class =“active”是硬编码的,但我想提出一些条件,例如:
<li //Condition: if (page=="link") print "class=\"active\""; //><a href="#">whatever link it's supposed to be</li>
我可以用PHP做到这一点,但我不知道如何用C#的ASP.net方式做到这一点。
我有以下结构:
- main.master -- -- pageA.aspx -- pageB.aspx -- pagec.aspx
这样当前页面通过以下方式加载:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
看起来像:
x x x x x x x x x x x x x x main.master x x x x x x x Nav A x Nav B x Nav C x x x x x x x p p p p p p p p p x x x p Crnt page x p p x x x p p p p p p p p p
我希望动态地将“.active”类应用于main.master,具体取决于当前页面设置的页面变量。
tldr:我想,我正在寻找的是一种简单的方法:<?php //some code here ?>
编辑:
protected void Page_Load(object sender, EventArgs e)
{
//check for conditions of home
...
this.isActiveHome.Text = @"<li class=""active""><a href=""Default.aspx"">Home</a></li>";
}
答案 0 :(得分:1)
<?php ?>
等效为<%= %>
如果你正在做很多逻辑,那么最好在后面的代码(.aspx.cs)中执行该逻辑并在那里渲染控件。
更好的选择是BulletedList:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.bulletedlist.aspx
通过在BulletedList
方法中添加Items
来构建Page_Load
控件。
您可以使用以下方式获取页面名称:
string pageName = Path.GetFileNameWithoutExtension(Page.AppRelativeVirtualPath);