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>
但我们有默认操作:指数? – Alexan
您的默认操作**不是可选**。它只会在你打电话给/联系人时设置,而不是在你/ Concact/1时设置,因为现在第二个参数将被视为操作。并没有称为“1”的行为。但是你的路线告诉它从** 3rd **参数中获取id。不要混淆**可选**和**默认值** – Tseng
@isthat:如果你的id有一个约束(即guid,int),你可以使用'routes.MapRoute(name:“noAction”,template:“{控制器=主页}/{id:int}“,默认值:{action:”Index“});',但字符串id不起作用,因为它也会匹配/ Contact/Edit,你会得到”Edit “作为id代替。 – Tseng