如何在Url.Action中传递区域?

时间:2015-05-20 05:50:02

标签: asp.net-mvc html-helper html.actionlink url.action

Html.ActionLink()中的问题是您无法在其生成的标记内添加其他html内容。 例如,如果要添加除文本之外的图标,请执行以下操作:

<a href="/Admin/Users"><i class="fa fa-users"></i> Go to Users</a>

使用Html.ActionLink(),您只能生成:

<a href="/Admin/Users">Go to Users</a>

因此,要解决此问题,您可以使用Url.Action()仅生成标记内的URL,如:

// Here, Url.Action could not generate the URL "/admin/users". So this doesn't work.
<a href="@Url.Action("", "Users", "Admin")"><i class="fa fa-usesr"></i> Go to Users</a>

// This works, as we know it but won't pass the Area needed.
<a href="@Url.Action("", "Users")"><i class="fa fa-users"></i> Go to Users</a>

那么,你如何使用Url.Action()传递区域?

4 个答案:

答案 0 :(得分:73)

您可以使用此#include <iostream> #include <vector> #include <numeric> #include <functional> int main() { std::vector<int> a {1, 2, 3}; std::vector<int> b {1, 2, 3, 4}; auto it = b.begin(); typedef std::vector<int>::iterator ci; auto res = std::inner_product<ci,ci&,int>(a.begin(), a.end(), it, 0); std::cout << (void*)&*b.begin() << ' ' << (void*)&*it << '\n'; }

另外,不要忘记添加控制器的命名空间,以避免管理区域控制器名称与站点控制器名称之间发生冲突。

像这样的东西

[program:app]

# emulates a virtualenv
directory    = /srv/app/
environment  = PATH="/srv/app/virtualenv/bin"

command      = /srv/app/virtualenv/bin/uwsgi --ini /srv/app/config/uwsgi.ini
autostart    = true
autorestart  = true

user         = app-user

答案 1 :(得分:7)

@Url.Action("{action}", "{controller}", new { Area = "areaname" });
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" })

使用anonymus对象将区域名称写为html属性。你可以使用actionlink html helper扩展方法来实现同样的目的。

答案 2 :(得分:2)

@Url.Action("{action}", "{controller}", new { Area = "areaname" });

@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}"}, new { @class = "btn btn-cool" })

您可以在此之上使用

答案 3 :(得分:1)

如果你想为根控制器创建链接,使用这个代码就足够了:

Url.Action("ShowImage", "Page", new { Area = "" })