【发布时间】:2020-10-30 16:32:09
【问题描述】:
我正在开发一个 asp.net MVC 核心 Web 应用程序,我有以下路由规则:-
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "IP",
pattern: "IP/{controller=Home}/{action=Index}/{id?}");
});
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "Info",
pattern: "Info/{controller=Home}/{action=Index}/{id?}");
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
然后在我的创建表单中,我定义以下内容以在根据当前 url 发回表单时使用不同的 url:-
<form method="post" action="@(!Context.Request.Path.Value.ToString().ToLower().Contains("/info") ? "/IP/submissions/create/": "/info/submissions/create/")" >
这是我的后期操作方法:-
[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Submission,SubmissionQuestionSubmission")] SubmissionCreate sc )
{
但目前当我发回表单时,不会调用操作方法......有什么想法吗?并且浏览器控制台将引发此错误:-
HTTP400: BAD REQUEST - The request could not be processed by the server due to invalid syntax.
POST - https://localhost:44363/info/Submissions/Create/
【问题讨论】:
-
您是否在页面之间重复使用相同的表单标签?通常你会指定
asp-controllerasp-action并让框架根据你的路由格式化 url。 -
@JeremyLakeman 如果我使用
asp-controller和asp-action,它将引用第一个路由规则-在我们的例子中是IP-,所以它不会使用当前路由 -
在您的情况下,您可能需要一个路由参数
pattern: "{name}/{controller=Home} ...,然后绑定并传递到您的视图并添加asp-route-name="@Model.name"。或“命名路线”asp-route="IP". -
@JeremyLakeman 你能就此提供更多建议吗?
标签: c# asp.net-core asp.net-core-mvc asp.net-mvc-routing