我正在编写我的第一个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
如果我使用默认站点控件中的链接,将显示。任何指导都将不胜感激。
许多祝福,
贾里德
答案 0 :(得分:1)
这只是过载解决的问题。可以在MSDN上找到所有重载的列表。
如上所述,您最终使用的是HtmlHelper, string, string, object, object
overload,而您的第一个null
是routeValues
,因此匿名对象就是您的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"} )