2010-08-10 5 views
1

Étant donné:ASP.net meilleure façon de changer les liens

<div class="subMenu"> 
    <a href="products.aspx" class="subLink">Products</a> <a href="productCats.aspx" class="subLink">Categories</a> <a href="example.aspx" class="subLink">Another</a> 
</div> 

Dans mon code derrière, comment pourrais-je changer programatically la liste des liens dans cette div?

Dans mon code derrière j'aurais quelque chose le long des lignes de:

if(menuID == 0) { 
    // Display some links here 
}else if(menuID == 1) { 
    // Display some links here 
}else if(menuID == 2) { 
    // Display some links here 
} 

Désolé pour la simplicité, juste essayer d'apprendre.

Répondre

1

Je pense que vous devriez utiliser le contrôle Panel et ajouter des liens hypertexte à l'intérieur.

page ASPX:

<asp:Panel ID="TestPanel" CssClass="Submenu" runat="server"> 
</asp:Panel> 
Code

derrière:

switch (menuId) 
    { 
     case 0: 
      TestPanel.Controls.Add(new HyperLink { Text = "Test", NavigateUrl = "testUrl", CssClass="Sublink" }); 
      TestPanel.Controls.Add(new HyperLink { Text = "Test2", NavigateUrl = "testUrl2", CssClass = "Sublink" }); 
      break; 
     case 1: 
      TestPanel.Controls.Add(new HyperLink { Text = "xxx", NavigateUrl = "xxx", CssClass="Sublink" }); 
      TestPanel.Controls.Add(new HyperLink { Text = "xxx", NavigateUrl = "xxx", CssClass = "Sublink" }); 
      break; 
     case 2: 
      TestPanel.Controls.Add(new HyperLink { Text = "xxx", NavigateUrl = "xxx", CssClass = "Sublink" }); 
      TestPanel.Controls.Add(new HyperLink { Text = "xxx", NavigateUrl = "xxx", CssClass = "Sublink" }); 
      break; 
     default: 
      break; 
    } 
0

Une façon simple:

<div class="subMenu"> 
    <%= myLinks %> 
</div> 



if(menuID == 0) { 
    myLinks = "<a href='products.aspx' class='sublink'>Products</a>etc.. etc.. " 
}else if(menuID == 1) { 
    myLinks = "<a href='products.aspx' class='sublink'>Products</a>etc.. etc.. " 
}else if(menuID == 2) { 
    myLinks = "<a href='products.aspx' class='sublink'>Products</a>etc.. etc.. " 
} 

Ajouter:

Protected myLinks as string = "" 

ci-dessous la définition de classe.

+0

Merci, où est définie la variable mesliens? –

+0

@Tom ajouter un contrôle littéral à votre page ASPX comme:

0

Je ne sais pas si cela est la meilleure façon - mais d'une façon :)

[Serializable] 
public class MyLinks 
{ 
    public string cLink; 
    public string cTitle; 
} 

public partial class Dokimes_StackOverFlow_AplesDokimes : System.Web.UI.Page 
{ 
    MyLinks [] MyLinksAre = { 
      new MyLinks{cLink = "products.aspx", cTitle = "products"}, 
      new MyLinks{cLink = "ProductCat.aspx", cTitle = "catalog"}, 
      new MyLinks{cLink = "Paradeigma.aspx", cTitle = "example"}, 

    }; 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     StringBuilder sRenderOnMe = new StringBuilder(); 
     int menuID = 0; 
     switch (menuID) 
     { 
      case 0: 
       foreach (int i in new int[] { 0, 1 }) 
        sRenderOnMe.AppendFormat("<a href=\"{0}\">{1}</a>", MyLinksAre[i].cLink, MyLinksAre[i].cTitle); 
       break; 


      default: 
       foreach (int i in new int[] { 0, 1, 2 }) 
        sRenderOnMe.AppendFormat("<a href=\"{0}\">{1}</a>", MyLinksAre[i].cLink, MyLinksAre[i].cTitle); 
       break; 
     } 

     txtMenouRender.Text = sRenderOnMe.ToString(); 
    } 
} 

Sur la page

<asp:Literal runat="server" ID="txtMenouRender"></asp:Literal> 
2

Une façon un peu plus complexe:

<asp:repeater id="rptMenu" runat="server"> 
    <itemTemplate> 
    <a href='<%# Eval("LinkUrl") %>' class="subLink"><%# Eval("LinkName") %></a> 
    <itemTemplate> 
</asp:repeater> 

Et puis construire une liste de liens à l'arrière et les lier au répéteur.

public class MenuItem 
{ 
    public string LinkUrl { get; set; } 
    public string LinkName { get; set; } 
} 

public void Page_Load() 
{ 
    //GetMenuItems would populate this list, depending on your logic 
    List<MenuItem> menuItems = GetMenuItems(menuId); 
    rptMenu.DataSource = menuItems; 
    rptMenu.DataBind() 
} 

Ceci a l'avantage que vous pourriez peut-être conduire à partir d'une base de données ce, et vous pouvez facilement modifier la sortie si vous avez besoin.

+0

De cette façon donnera plus de flexibilité si la liste des liens est susceptible de changer à l'avenir . –

+0

En effet. Cela signifie probablement écrire moins de code à long terme. – Paddy

0

Voulez-vous un simple tag href ou des contrôles asp.net?

<div class="subMenu"> 
<% if(menuID == 0) { %> 
    <a href="products.aspx" class="subLink">Products</a> 
<% } else if(menuID == 1) { %> 
    <a href="productCats.aspx" class="subLink">Categories</a> 
<% } else { %> 
    <a href="example.aspx" class="subLink">Another</a> 
<% } %> 
</div> 

Vous pouvez mettre des contrôles aussi:

<div class="subMenu"> 
<% if(menuID == 0) { %> 
    <asp:LinkButton ID="Test" runat="server" OnClick="Test_OnClick" class="subLink">Products</LinkButton> 
<% } else if(menuID == 1) { %> 
    <a href="productCats.aspx" class="subLink">Categories</a> 
<% } else { %> 
    <a href="example.aspx" class="subLink">Another</a> 
<% } %> 
</div> 
Questions connexes