【问题标题】:RazorPages anchor tag helper with multiple parameters具有多个参数的 RazorPages 锚标记助手
【发布时间】:2020-05-30 15:57:02
【问题描述】:

这是我尝试创建链接的 RazorPages 页面:

@page "{ReportId:int}/{SicCode:alpha?}"

这行得通

<a asp-page="/ReportSics" asp-route-ReportId="3">rs1</a>

它产生

<a href="/Reports/ReportSics/3">rs1</a>

但这会产生一个空白的href

<a asp-page="/ReportSics" asp-route-ReportId="3" asp-route-SicCode="10">rss2</a>

也就是说:标签助手使用一个参数而不是两个参数。 为什么? 有没有可能让它发挥作用?

(我有另一个页面具有相同的@page,但第二个参数不是可选的,并且似乎无法创建指向它的链接。)

此外,请求 Page/2/M 有效,但 Page/2/12 返回 404。为什么? (第二个参数是一个字符串,有时可以是一个数字,但它总是被视为一个字符串。)

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

    这行得通

    是的,它可以工作,因为它产生了一个类似于 baseUrl/reportsics/?reportId=5 的路由 另一个生成一个类似于baseUrl/reportsics/?reportId=5&amp;sicCode=678 的 URL,然后它与您的路由定义不匹配。我认为你应该试试这个。
    实验性

    asp-page="/reportSics/@myId/@sicCode
    

    虽然这不是按照您的想法做的正确方法。如果你真的想改变你的 URL 结构,为什么不做 url-rewrite 呢?
    编辑。 形成您最近的 cmets,似乎您想在您的操作方法中传递许多参数,而不是针对 URL 结构。那么我建议你只是

    public IActionResult(string ReportId, string sicCode)
    {
      //......
    }
    
    //And the your URL target
    <a asp-page="ReportSics" asp-route-ReportId="55" asp-route-sicCode="566" ></a>
    

    然后它会匹配路由。我认为你应该删除你在@page 定义之后放置的那个助手,如果你已经这样做并且问题仍然存在,请尝试一下。

    【讨论】:

    • 那我该怎么做呢?我的@page 错了吗?还是我需要向Startup.cs 添加内容?还是我使用 asp-pageasp-route 错了?
    • 我真的很想从存储在string 和参数值Dictionary&lt;string, string&gt; 中的页面名称中创建一个href。我以为asp-pageasp-route-all-data 会做到这一点,但显然不是?
    • 所以看起来如果我从@page 中删除参数,然后它会回到正常的GET 参数,我可以使用string.Join("&amp;",...) 构建URL。那么,如果您有多个参数,那么 URL 帮助器的意义何在?
    【解决方案2】:

    事实证明,如果一个参数具有约束:alpha,那么它只有在传递的值不能被解析为intfloat时才有效。

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2016-06-04
      • 2019-08-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2013-06-09
      • 2016-12-01
      • 2012-07-11
      相关资源
      最近更新 更多