【问题标题】:MVC3 Action link on layout navigation布局导航上的 MVC3 操作链接
【发布时间】:2012-04-25 20:29:53
【问题描述】:

我正在编写我的第一个 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

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

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

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

http://localhost:49365/site/photos

如果我使用默认站点控件中的链接,则会显示该链接。任何指导将不胜感激。

许多祝福,

贾里德

【问题讨论】:

  • 作为题外话的提示,在视图中使用 CSS 作为图像。这样可以避免每个 标签向服务器发出 GET 请求

标签: asp.net-mvc-3 razor


【解决方案1】:

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

正如所写,你最终使用了HtmlHelper, string, string, object, objectoverload,你的第一个nullrouteValues,所以匿名对象是你的htmlAttributes

您在正确的轨道上通过"Site" 而不是null 来获得正确的控制器,但这会让您使用HtmlHelper, string, string, string, object, object overload。第一个对象仍然是routeValues,这就解释了为什么它变成了一个查询字符串。

要指定htmlAttributes,您可以继续为routeValues 传递null 占位符

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

或者你使用named arguments

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

【讨论】:

  • 感谢这篇文章指导我更彻底地理解 html 助手 ActionLink() 的重载。我最终做了以下事情。 @Html.ActionLink( "联系我们", "ContactUs", new { controller = "Site" }, htmlAttributes: new { @class= "link1" })
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2019-10-15
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多