了解 ASP Net Core 生成的 URL 标签助手。 [FromRoute] 或 [FromQuery]
Understanding ASP Net Core generated URL tag helper. [FromRoute] or [FromQuery]
我遇到这个问题,从视图生成 URL 时 ASP Net Core 不一致。
我用2个案例来描述我的问题。注意 View
中有标签助手 asp-route-....
。我尝试更改 asp-route-....
中的变量名称,结果它生成了一个不一致的 URL
案例一:
查看
<a asp-action="Edit" asp-route-p_id="@item.CustomerContactInfoId" >Edit</a>
生成URL
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
案例二:
查看
<a asp-action="Edit" asp-route-id="@item.CustomerContactInfoId" >Edit</a>
生成URL
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
原来是因为路由参数的默认名称是 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)
中找到解释
我遇到这个问题,从视图生成 URL 时 ASP Net Core 不一致。
我用2个案例来描述我的问题。注意 View
中有标签助手 asp-route-....
。我尝试更改 asp-route-....
中的变量名称,结果它生成了一个不一致的 URL
案例一:
查看
<a asp-action="Edit" asp-route-p_id="@item.CustomerContactInfoId" >Edit</a>
生成URL
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
案例二:
查看
<a asp-action="Edit" asp-route-id="@item.CustomerContactInfoId" >Edit</a>
生成URL
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
原来是因为路由参数的默认名称是 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)
中找到解释