如何在动作链接中指定区域名称?

Jer*_*emy 154 asp.net-mvc asp.net-mvc-areas asp.net-mvc-2

我有一个共享的母版页,我在我的mvc 2应用程序中使用了2个不同的区域.母版页有一个动作链接,当前指定控制器和动作,但当然如果我在错误的区域,链接不起作用.我认为带有区域参数的actionlink没有重载,是否可以这样做?

Jer*_*emy 243

弄清楚了..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
Run Code Online (Sandbox Code Playgroud)

  • 啊!!!这是一个棘手的"新{}"在最后,我一直忘记包括! (17认同)
  • @ Pure.Krome - 是的.没什么直观的! (3认同)
  • 确保Areaname之前或之后没有空白区域.否则它会忽略它......然后会让你怀疑四个小时出了什么问题......就像我一样. (3认同)

Fra*_*man 77

我之后碰到的东西,我想其他人可能遇到:如果你需要从区域内链接到不在区域内的动作,你仍然需要将区域指定为空字符串.

例如,我将一些MVC代码移动到一个区域,发现我需要更新引用站点上其他页面的母版页中的URL.

要为不在某个区域内的内容指定网址,请使用

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常好的提示!但它给出了MVC 2的预期结果.小修正 - Html.ActionLink("home","Index",new {area ="",controller ="Home"}) (4认同)

小智 15

使用:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)
Run Code Online (Sandbox Code Playgroud)

注意:第4个参数是传递路由Values,如果传递一个空参数,它将考虑根结构,如果传递适当的值,则将其用作区域.

另外不要忘记使用nullnew{}作为第5个参数,因为传递nullnew {}创建动作链接时不会重载方法(text,action,controller,route data)或者(text,action,controller,route data,html attribute)因此使用正确的方法


小智 11

在MVC2给area="root"我工作如下

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
Run Code Online (Sandbox Code Playgroud)


dav*_*v_i 6

如果在View中大量使用某个区域,可以使用一个巧妙的技巧将其定义为顶部的变量:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
Run Code Online (Sandbox Code Playgroud)