微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解 ASP Net Core 生成的 URL 标记助手 [FromRoute] 或 [FromQuery]

如何解决了解 ASP Net Core 生成的 URL 标记助手 [FromRoute] 或 [FromQuery]

我遇到了这个问题,即从视图中生成 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)

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

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)

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

localhost/CustomerContactInfo/Edit?id=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

中找到说明

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。