我今天在项目中遇到了一个非常奇怪的行为。 所以我正在一个网站上工作,该网站有一个管理员视图和一个共同的用户视图。这些页面存储在名为“Admin”的文件夹中,以及名为“User”的文件夹位于“Views”文件夹
下我开始只为Admin页面设置功能,所以我从未意识到我的UserController不起作用。它始终将我转到管理员/某个页面而不是用户/某些页面。
经过一些测试后,我发现了以下问题:
如果我使用
@Html.ActionLink("Admin", "AdminHome", "Admin")
@Html.ActionLink("User", "UserHome", "User")
一切正常。
但是,只要我在链接中添加一个类,例如
@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })
它停止工作。当我现在点击链接到用户主页时,它会路由到管理员/用户主页而不是用户/用户主页,显然无法找到该页面。
为什么?有没有人经历过这个?
我的意思是我仍然可以将它包装在另一个div中并在那里添加类。我只是想知道这种行为背后是否有原因。
答案 0 :(得分:2)
因为Stephen Muecke在他的评论中指出,你应该使用的方法是ActionLink(HtmlHelper, String, String, String, Object, Object)
,并带有以下签名:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
object routeValues,
object htmlAttributes
)
@Html.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes)
您目前正在使用ActionLink(HtmlHelper, String, String, Object, Object)
以下签名:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
object routeValues, // here you passed controllerName ("User") instead
object htmlAttributes
)
@Html.ActionLink(linkText, actionName, routeValues, htmlAttributes)
答案 1 :(得分:-1)
您正在使用错误的重载。通过使用:
@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })
ASP.Net MVC认为the fourth parameter is route values并非如此。
为了使其按预期工作,您需要使用this overload that takes five parameters并将属性设置在第五个位置,如下所示:
@Html.ActionLink("User", "UserHome", "User", null, new { class= "someClass" })
我将null
设置为第四个参数,因为看起来您的控制器操作不需要任何路由值。