asp.net核心和ASP路由-ID

问题描述:

我创建了一个接触器与签名:asp.net核心和ASP路由-ID

public IActionResult Index(string id) 

没有在路由表中看中:

app.UseMvc(routes => 
{ 
    routes.MapRoute(
    name: "default", 
    template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

在我家认为,我试图创建一个链接到联系人/索引:

<a asp-controller="Contact" asp-route-id="3255">Contact me</a> 

生成的链接看起来很好,并进行正确的操作。 带或不带asp的动作,生成的链接是:

<a href="/Contact/Index/3255">Contact me</a> 

但ID没有设定。 但是当我复制链接并执行“粘贴并转到”时,将设置id参数。 它也适用于如果我查看页面源并单击生成的链接。 当我点击页面上的链接时,它不起作用。

你能告诉我有什么问题吗?

由于配置的路由,

路线需要包括action

<a asp-controller="Contact" 
    asp-action="Index" 
    asp-route-id="3255">Contact me</a> 

这应该产生

<a href="/Contact/Index/3255">Contact me</a> 
+0

但我们有默认操作:指数? – Alexan

+1

您的默认操作**不是可选**。它只会在你打电话给/联系人时设置,而不是在你/ Concact/1时设置,因为现在第二个参数将被视为操作。并没有称为“1”的行为。但是你的路线告诉它从** 3rd **参数中获取id。不要混淆**可选**和**默认值** – Tseng

+0

@isthat:如果你的id有一个约束(即guid,int),你可以使用'routes.MapRoute(name:“noAction”,template:“{控制器=主页}/{id:int}“,默认值:{action:”Index“});',但字符串id不起作用,因为它也会匹配/ Contact/Edit,你会得到”Edit “作为id代替。 – Tseng