J'ai un menu sur mon site Web, certains liens sont internes et construits avec la méthode Html.ActionLink, et certains sont externes et construits avec une balise.

Mais je n'aime pas ce code, je préfère avoir une ligne au lieu de deux. Mais je ne sais pas comment faire, quelqu'un peut-il m'aider s'il vous plaît ?

<table width="100%" border="0" cellpadding="0" cellspacing="0">
<%
    foreach (AtomicCms.Core.DomainObjectsImp.MenuItem item in Model.MenuItems)
    {
        if (!item.IsExternalUrl)
        {
%>
<tr align="left">
    <td>
        <%=Html.ActionLink(Html.Encode(item.Title), "Content", "Home", new { id = item.Entry.Id, name = item.Entry.Alias }, new {title = Html.Encode(item.Title), @class="mainlevel"})%>
    </td>
</tr>
<%}
        else
        {
%>
<tr align="left">
    <td>
        <a href="<%=item.NavigateUrl %>" class="mainlevel">
            <%=Html.Encode(item.Title)%></a>
    </td>
</tr>
<%} %>
<%
    } %>
2
Yaplex 2 mars 2010 à 17:45

2 réponses

Meilleure réponse

Je voudrais extraire cela vers une méthode d'aide html. Cela ressemblerait à quelque chose comme :

public static string MenuItemLink(this HtmlHelper html, MenuItem item) {
    ...
}

Votre code de vue ressemblerait à quelque chose comme : <%= Html.MenuItemLink(item) %>

3
jrotello 2 mars 2010 à 17:50
J'ai trouvé une solution pour créer une méthode d'extension pour UrlHelper au lieu de HtmlHelper et cela fonctionne pour moi. Merci beaucoup. <%=Html.Encode(item.Title)%>
 – 
Yaplex
2 mars 2010 à 18:14

Pourquoi ne pas construire le lien dans votre contrôleur et l'intégrer dans le modèle ? Alors vous n'avez besoin que de la deuxième ligne ? C'est-à-dire que votre modèle MenuItem est une collection de liens et de leur texte associé. Utilisez l'UrlHelper dans le contrôleur pour créer le lien dans le contrôleur.

0
tvanfosson 2 mars 2010 à 17:54