在我的 MVC .NET Core 3.1 项目中,如何防止锚标记助手将 Area 附加到查询字符串?
In my MVC .NET Core 3.1 project, how can I prevent the anchor tag helper from appending Area to the querystring?
我正在将一个旧的 MVC Web 应用程序从 Visual Studio 迁移到 Visual Studio 代码,并且我正在使用 .NET Core 3.1.301。应用程序使用区域。我正在尝试创建从本网站主页到目标区域索引页的 link。
使用锚标记助手,我的 Razor 类似于:
<a asp-area="TargetArea" asp-controller="Home" asp-action="Index">link</a>
我的期望是上面的代码会在呈现的 HTML:
中生成此标记
<a href="/TargetArea">link</a>
相反,这被渲染:
<a href="/TargetArea?area=TargetArea">link</a>
在Startup.cs中我定义了TargetArea:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
在我区域内的 HomeController 中,我用 Area 属性装饰了控制器,如下所示:
[Area("TargetArea")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
那么我在这里缺少什么?我想让那个查询字符串消失。感谢您的帮助。
如下更改路线模板:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
第二种方式:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern:"TargetArea/{controller=Home}/{action=Index}/{id?}",
defaults: new { area = "TargetArea" },
constraints: new { area = "TargetArea" }) ;
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
另一种方式:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "MyTargetArea",
areaName: "TargetArea",
pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
参考:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#areas
我正在将一个旧的 MVC Web 应用程序从 Visual Studio 迁移到 Visual Studio 代码,并且我正在使用 .NET Core 3.1.301。应用程序使用区域。我正在尝试创建从本网站主页到目标区域索引页的 link。
使用锚标记助手,我的 Razor 类似于:
<a asp-area="TargetArea" asp-controller="Home" asp-action="Index">link</a>
我的期望是上面的代码会在呈现的 HTML:
中生成此标记<a href="/TargetArea">link</a>
相反,这被渲染:
<a href="/TargetArea?area=TargetArea">link</a>
在Startup.cs中我定义了TargetArea:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
在我区域内的 HomeController 中,我用 Area 属性装饰了控制器,如下所示:
[Area("TargetArea")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
那么我在这里缺少什么?我想让那个查询字符串消失。感谢您的帮助。
如下更改路线模板:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
第二种方式:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "TargetArea",
pattern:"TargetArea/{controller=Home}/{action=Index}/{id?}",
defaults: new { area = "TargetArea" },
constraints: new { area = "TargetArea" }) ;
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
另一种方式:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "MyTargetArea",
areaName: "TargetArea",
pattern: "TargetArea/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
参考:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#areas