布局导航上的MVC3 Action链接

时间:2012-04-25 20:29:54

标签: asp.net-mvc-3 razor

我正在编写我的第一个MVC3 Web应用程序。我的SiteLayout.cshtml中的导航编码如此。

<table width="950" border="0" align="center" cellpadding="0" cellspacing="0" style="height: 40px;">
            <tr align="center">
                <td>@Html.ActionLink( 
                    "Home", 
                    "Index", 
                    null, 
                    new { @class= "link1"}) 
                </td>
                <td><img src="@Url.Content("~/Content/images/img3.gif")" alt="" width="2" height="40" /></td>
                <td>@Html.ActionLink( 
                    "Events", 
                    "Events", 
                    null, 
                    new { @class= "link1"}) 
                </td>
                <td><img src="@Url.Content("~/Content/images/img3.gif")" alt="" width="2" height="40" /></td>
                <td>@Html.ActionLink( 
                    "Membership", 
                    "Membership", 
                    null, 
                    new { @class= "link1"}) 
                </td>
                <td><img src="@Url.Content("~/Content/images/img3.gif")" alt="" width="2" height="40" /></td>
                <td>@Html.ActionLink( 
                    "Photos", 
                    "Photos", 
                    null, 
                    new { @class= "link1"} )
                </td>
                <td><img src="@Url.Content("~/Content/images/img3.gif")" alt="" width="2" height="40" /></td>
                <td>@Html.ActionLink( 
                    "About Us", 
                    "AboutUS", 
                    null, 
                    new { @class= "link1"})
                </td>
                <td><img src="@Url.Content("~/Content/images/img3.gif")" alt="" width="2" height="40" /></td>
                <td>@Html.ActionLink( 
                    "Contact Us", 
                    "ContactUs", 
                    null, 
                    new { @class= "link1"})</td>
            </tr>
        </table>``

每当我切换到使用相同layout.cshtml的第二个控制器注册时,操作链接返回的结果是

http://localhost:49365/registration/Photos

即使当前在注册控制器上,如何将操作链接指向站点控制器?我已经尝试将“Site”放在我当前具有空值的位置。如果我这样做,那么它可以正常工作,但显示此URL

http://localhost:49365/Site/Photos?class=link1

并且css类不再应用于链接。我希望的网址是相同的网址

http://localhost:49365/site/photos

如果我使用默认站点控件中的链接,将显示

。任何指导都将不胜感激。

许多祝福,

贾里德

1 个答案:

答案 0 :(得分:1)

这只是过载解决的问题。可以在MSDN上找到所有重载的列表。

如上所述,您最终使用的是HtmlHelper, string, string, object, object overload,而您的第一个nullrouteValues,因此匿名对象就是您的htmlAttributes

您正在通过"Site"而非null的正确轨道以获得正确的控制器,但这会让您转向使用HtmlHelper, string, string, string, object, object overload。第一个对象仍然是routeValues,这解释了它成为查询字符串的原因。

要指定htmlAttributes,您可以继续为null

传递routeValues占位符
@Html.ActionLink( 
                "Photos", 
                "Photos",
                "Site", 
                null, 
                new { @class= "link1"} )

或您使用了named arguments

@Html.ActionLink( 
                "Photos", 
                "Photos",
                "Site", 
                htmlAttributes: new { @class= "link1"} )