我有一个如下所示的AdminController:
AdminController [Route("admin")]
Index() (landing page for all administrative content)
UserIndex() - [Route("users")]
UserDetails() - [Route("users/details/{id}")]
RoleIndex() - [Route("roles")]
RoleDetails() - [Route("roles/details/{id}")]
这些与以下网址格式相同:
管理员/用户
管理员/用户/信息/ 1
但是,如果我尝试在我的视图中执行以下操作,则无效:
Url.Action("UserDetail", "Admin")
这不应该足够智能输出:' / admin / users / details'?
仅当我执行Url.Action("Index", "Admin")
时才有效,因为没有路径标记。
更新
我正在尝试将Kendo Template Syntax与Kendo Grid ClientTemplate列一起使用:
columns.Bound(c => c.Id).ClientTemplate(
"<a href='" +
Url.Action("UserDetails", "Admin") +
"/#= Id #'" +
">Details</a>"
);
每行的链接最终如下所示: &#39;本地主机:一百二十三分之九千&#39; / admin / users / detail完全被忽略......
这是我在AdminController中尝试调用的方法的确切声明:
// GET: Users/Details/5
[Route("users/details/{id}")]
public async Task<IActionResult> UserDetails(string id)
{
}
答案 0 :(得分:3)
重新检查控制器的路由和操作
[Route("admin")]
public class AdminController : Controller {
// GET admin
[Route("")]
public IActionResult Index() {...}
//GET admin/users
[Route("users")]
public IActionResult UserIndex() {...}
//GET admin/users/details/1
[Route("users/details/{id}")]
public IActionResult UserDetails(string id) {...}
//GET admin/roles
[Route("roles")]
public IActionResult RoleIndex() {...}
//GET admin/roles/details/1
[Route("roles/details/{id}")]
public IActionResult RoleDetails(string id) {...}
}
这不应该足够聪明输出:'/ admin / users / details'?
根据您的路线设置/admin/users/details
不存在。
等待/admin/users/details/{id}
的请求,其中{id}是userid
。因此,当请求Url.Action("UserDetail", "Admin")
时,没有什么可匹配的。
Url.Action("UserDetail", "Admin", new { id = "1" })
您可以通过更新路径
使id
参数成为可选参数
[Route("users/details/{id?}")]
这将允许users/details
工作。但id
参数的值将默认为null
。
仅当我
Url.Action("Index", "Admin")
时才有效,因为没有路标标记
它仅适用于Url.Action("Index", "Admin")
,因为约定默认匹配Index。