Html.RouteLink被破坏了吗?

时间:2009-03-28 04:03:15

标签: asp.net-mvc

为什么此代码会产生这些结果?

CODE:

    <%@ Control Language="C#" 
            Inherits="System.Web.Mvc.ViewUserControl< RoomsAlive.ViewModels.ProductCatalogViewModel >" %>

<div id="product_nav">
    <ul>
    <%--ADD PREV TAB--%>
    <% if (Model.HasPreviousPage) %>
    <% { %>
        <li><%= Html.RouteLink("<<", "CatalogMenu", new { controller = "Catalog", action = "Index", style = (Model.GroupName), position = (Model.PageIndex - 1) })%></li>
    <% } %>
    <%--LOOP HERE--%>
    <%  foreach (RoomsAlive.Models.ProductMenuView myFPV in Model.ProductMenu)
        { %>
        <li><%= Html.RouteLink(myFPV.Name, "CatalogMenu", new { controller = "Catalog", action = "Index", group = Model.GroupName })%></li>
    <%  } %>
    <%--ADD NEXT TAB--%>
    <% if (Model.HasNextPage) %>
    <% { %>
        <li><%= Html.RouteLink(">>", "CatalogMenu", new { controller = "Catalog", action = "Index", position = (Model.PageIndex + 1) })%></li>
    <% } %>
    </ul>
</div>

结果:

<div id="product_nav">
    <ul>
        <li><a href="">LifeStyle</a></li>
        <li><a href="">Rooms</a></li>
    </ul>
</div>

BTW:如果我使用&lt; %%&gt;形式而不是&lt;%=%&gt;形成它产生这个:

<div id="product_nav">
    <ul>
        <li></li>
        <li></li>
    </ul>
</div>

1 个答案:

答案 0 :(得分:0)

为什么要在Actionlink的对象部分指定控制器和操作?

这样做是不是最好:

<%= Html.RouteLink("<<", "Index", "Catalog", new { style = Model.GroupName, position = (Model.PageIndex - 1) }, null)%>

ActionLink的第二个属性始终是所需的操作名称,您将其设置为CatalogMenu,然后您将创建一个名为“Index”的对象。出于这个原因(因为我不知道你想要什么'CatalogMenu'),我已经把它拿出来了。

请注意routeValues对象后面的null。这是因为Html.ActionLink的10个构造函数,这个最适合:

ActionLink(LinkText, ActionName, ControllerName, RouteValues, HtmlAttributes)

此外,如果您使用&lt;%...%&gt;而不是&lt;%= ...%&gt;,然后它不会输出链接。这是因为ActionLink返回一个字符串。标签中的所有'='实际上都是Response.Write。

希望这能解释它。