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