none
Comment passer un paramètre dans la propriété NavigateUrl d'un MenuItem ? RRS feed

  • Question

  • Bonjour,

    Je travaille avec Visual Web Developer 2008 Express sous Windows XP.
    J'ai une page qui contient un menu composé d'éléments MenuItem.
    Ces éléments MenuItem sont dotés d'une propriété NavigateUrl.
    La page Web appelée reçoit un paramètre via le code suivant :

    Request.QueryString[

    "myParam"];

    Ce paramètre est stocké dans un champ HiddenField.

    J'aimerais pouvoir récupérer ce paramètre pour le transmettre à la page qui est appelée dans la propriété NavigateUrl d'un élément MenuItem mais je n'y arrive pas.

    Quelqu'un a-t'il une solution ?

    Merci.
    lundi 8 mars 2010 11:19

Réponses

  • Merci pour l'intervention mais le problème ne vient pas de là.
    Je n'arrivais pas à attribuer ce paramètre par un code du style :

     

    <asp:menu id="NavigationMenu1"...
    <Items>
    <asp:MenuItem NavigateUrl= 'MyPage.aspx?prm=<%Eval("IdDeMonHiddenField.Value") %>'></asp:MenuItem>
    </Items>
    </asp:menu>

     

     

    Je me suis finalement trouvé une solution en codant une partie de la structure dans le .cs, solution que je trouve moins jolie) :


    private void AddItemToMenu(string _displayText, string _url, string _toolTip)
    {
    MenuItem item = new MenuItem(_displayText);
    item.NavigateUrl = _url +
    "?myParam=" + paramValue;  // paramValue come from an hiddenField
    item.ToolTip = _toolTip;
    NavigationMenu1.Items.Add(item);
    }

     

    protected void Page_Load(object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    NavigationMenu1.Items.Clear();
    AddItemToMenu(
    "Title1", "Page1.aspx", "Text1");
    AddItemToMenu(
    "Title2", "Page2.aspx", "Text2");
    }
    }

     


    • Marqué comme réponse DepWeb lundi 8 mars 2010 16:19
    lundi 8 mars 2010 16:19
  • Bonsoir,

    pour rester dans le déclaratif il est possible d'utiliser MenuItemBinding. Contrairement à MenuItem cette classe permet le databinding.
    Voici un exemple avec un xml définit dans un xmlDatasource au sein de la page.
    Si besoin de plus de souplesse le xml pourrait être construit dynamiquement dans la page. (ce qui éviterait le Format sur le datasource ...)

    <asp:XmlDataSource ID="sourceXML" runat="server" OnDataBinding="sourceXML_DataBinding">
        <Data>
        <Nodes>
            <Node url='~/Page1.aspx?param={0}' field='MaPage1' tooltip='tooltip1'/>
            <Node url='~/Page2.aspx?param={0}' field='MaPage2' tooltip='tooltip2'/>
        </Nodes>
        </Data>
    </asp:XmlDataSource>
    <asp:Menu ID="Menu1" runat="server" ShowStartingNode="true" DataSourceID="sourceXML">
        <DataBindings>
            <asp:MenuItemBinding DataMember="Node" NavigateUrlField="url" TextField="field" ToolTipField="tooltip" />
        </DataBindings>
    </asp:Menu>
    

    protected void Page_Load(object sender, EventArgs e)
    {
          sourceXML.Data = String.Format(sourceXML.Data, monParam);
    }

    Cordialement

    • Marqué comme réponse DepWeb mercredi 10 mars 2010 10:28
    lundi 8 mars 2010 17:53
    Modérateur

Toutes les réponses

  • Bonjour,

    avez-vous essayé de passer votre URL en tant qu'URI (http://msdn.microsoft.com/fr-fr/library/system.uri.aspx ) à votre propriété NavigateUrl ?

    En espérant avoir pu vous aider.
    Audrey - http://blogs.developpeur.org/audrey/
    lundi 8 mars 2010 12:43
  • Merci pour l'intervention mais le problème ne vient pas de là.
    Je n'arrivais pas à attribuer ce paramètre par un code du style :

     

    <asp:menu id="NavigationMenu1"...
    <Items>
    <asp:MenuItem NavigateUrl= 'MyPage.aspx?prm=<%Eval("IdDeMonHiddenField.Value") %>'></asp:MenuItem>
    </Items>
    </asp:menu>

     

     

    Je me suis finalement trouvé une solution en codant une partie de la structure dans le .cs, solution que je trouve moins jolie) :


    private void AddItemToMenu(string _displayText, string _url, string _toolTip)
    {
    MenuItem item = new MenuItem(_displayText);
    item.NavigateUrl = _url +
    "?myParam=" + paramValue;  // paramValue come from an hiddenField
    item.ToolTip = _toolTip;
    NavigationMenu1.Items.Add(item);
    }

     

    protected void Page_Load(object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    NavigationMenu1.Items.Clear();
    AddItemToMenu(
    "Title1", "Page1.aspx", "Text1");
    AddItemToMenu(
    "Title2", "Page2.aspx", "Text2");
    }
    }

     


    • Marqué comme réponse DepWeb lundi 8 mars 2010 16:19
    lundi 8 mars 2010 16:19
  • Bonsoir,

    pour rester dans le déclaratif il est possible d'utiliser MenuItemBinding. Contrairement à MenuItem cette classe permet le databinding.
    Voici un exemple avec un xml définit dans un xmlDatasource au sein de la page.
    Si besoin de plus de souplesse le xml pourrait être construit dynamiquement dans la page. (ce qui éviterait le Format sur le datasource ...)

    <asp:XmlDataSource ID="sourceXML" runat="server" OnDataBinding="sourceXML_DataBinding">
        <Data>
        <Nodes>
            <Node url='~/Page1.aspx?param={0}' field='MaPage1' tooltip='tooltip1'/>
            <Node url='~/Page2.aspx?param={0}' field='MaPage2' tooltip='tooltip2'/>
        </Nodes>
        </Data>
    </asp:XmlDataSource>
    <asp:Menu ID="Menu1" runat="server" ShowStartingNode="true" DataSourceID="sourceXML">
        <DataBindings>
            <asp:MenuItemBinding DataMember="Node" NavigateUrlField="url" TextField="field" ToolTipField="tooltip" />
        </DataBindings>
    </asp:Menu>
    

    protected void Page_Load(object sender, EventArgs e)
    {
          sourceXML.Data = String.Format(sourceXML.Data, monParam);
    }

    Cordialement

    • Marqué comme réponse DepWeb mercredi 10 mars 2010 10:28
    lundi 8 mars 2010 17:53
    Modérateur
  • Ca me semble très bien.
    Merci

    mercredi 10 mars 2010 10:28