【问题标题】:asp.net core and asp-route-idasp.net 核心和 asp-route-id
【发布时间】:2017-04-19 02:04:53
【问题描述】:

我已经使用该签名创建了一个联系人控制器:

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-action,生成的链接是:

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

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

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

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc asp.net-core-tag-helpers asp.net-core-routing


    【解决方案1】:

    给定配置的路由,

    路由需要包含action

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

    应该生成什么

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

    【讨论】:

    • 但我们有默认操作:索引?
    • 您的默认操作不是可选的。它只会在你调用 /Contact 时设置,但不会在你调用 /Concact/1 时设置,因为现在第二个参数将被视为操作。并且没有称为“1”的动作。但是您的路线告诉它从 3rd 参数中获取 id。不要将可选默认值混淆
    • @isthat:如果您的 id 有约束(即 guid、int),您可以使用 routes.MapRoute(name: "noAction", template: "{controller=Home}/{id:int}", defaults: { action: "Index" });,但使用字符串 id 它不起作用,因为它也会匹配 /Contact/Edit 而您'会得到“编辑”作为 id 代替。
    • @Tseng 我编辑了这个问题。有或没有'asp-action',生成的链接就是它应该是的(这是因为如果没有指定,“索引”操作是默认的。
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2017-03-12
    • 2018-10-17
    • 1970-01-01
    • 2021-06-06
    • 2017-03-22
    • 2020-01-10
    相关资源
    最近更新 更多