【问题标题】:Understanding ASP Net Core generated URL tag helper. [FromRoute] or [FromQuery]了解 ASP Net Core 生成的 URL 标签助手。 [FromRoute] 或 [FromQuery]
【发布时间】:2021-01-21 10:19:50
【问题描述】:

我遇到了这个问题,即从视图生成 URL 时 ASP Net Core 不一致。

我将用 2 个案例来描述我的问题。注意View 中有标签助手asp-route-....。我尝试更改asp-route-.... 中的变量名,结果发现它生成的 URL 不一致

案例 1:

查看

<a asp-action="Edit" asp-route-p_id="@item.CustomerContactInfoId" >Edit</a> 

生成的网址

localhost/CustomerContactInfo/Edit?p_id=1 // So in controller I have to use FromQuery instead of FromRoute

控制器

public async Task<IActionResult> Edit([FromQuery(Name ="p_id")]int? p_id) 
//OR 
public async Task<IActionResult> Edit(int? p_id)

问题 = 为什么生成的 URL 不是这样的

localhost/CustomerContactInfo/1

案例 2:

查看

<a asp-action="Edit" asp-route-id="@item.CustomerContactInfoId" >Edit</a> 

生成的网址

localhost/CustomerContactInfo/1  // So in controller I have to use FromRoute instead of From

控制器

public async Task<IActionResult> Edit([FromRoute(Name ="id")]int? p_id)
//OR 
public async Task<IActionResult> Edit(int? id)

问题 = 为什么生成的 URL 不是这样的

localhost/CustomerContactInfo/Edit?id=1

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc asp.net-core-2.1 asp.net-core-tag-helpers


    【解决方案1】:

    原来是因为路由参数的默认名称是id,正如您在Startup.cs configure() 方法中看到的那样

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

    那么

    如果您将{id?} 更改为{p_id?},则根据您在Case 1 中的问题,它将是

    /*-------In View--------------*/
    <a asp-action="Edit" asp-route-p_id="@item.CustomerContactInfoId" >Edit</a> 
    
    /*------Generated URL---------*/
    localhost/CustomerContactInfo/1
    
    /*------In controller---------*/
    public async Task<IActionResult> Edit([FromRoute(Name ="p_id")]int? p_id) 
    //OR 
    public async Task<IActionResult> Edit(int? p_id)
    

    Case 2 将是

    /*-------In View--------------*/
    <a asp-action="Edit" asp-route-id="@item.CustomerContactInfoId" >Edit</a> 
    
    /*------Generated URL---------*/
    localhost/CustomerContactInfo/Edit?id=1
    
    /*------In controller---------*/
    public async Task<IActionResult> Edit([FromRoute(Name ="p_id")]int? p_id)
    //OR 
    public async Task<IActionResult> Edit(int? p_id)
    

    你可以在Microsoft Documentation找到解释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 2019-11-02
      • 2019-12-30
      • 1970-01-01
      相关资源
      最近更新 更多