c# - 如何阻止 BeginForm() 引用 ASP.NET Core MVC 应用程序中的区域?
问题描述
我正在创建一个在任何区域之外的联系页面,但是当我使用@Html.BeginForm
帮助程序时,它会继续添加我的一个区域的名称。
我的控制器位于 /contact/index
public class ContactController : Controller
{
public IActionResult Index()
{
var contactForm = new ContactFormViewModel();
return View(contactForm);
}
[HttpPost]
public IActionResult SendEmail(ContactFormViewModel contactFormInfo)
{
// send email code
return View();
}
}
我Index
的联系方式:
@model ContactFormViewModel
@{
ViewData["Title"] = "Contact";
ViewData["PageName"] = "contact_index";
ViewData["Heading"] = "<i class='fal fa-info-circle'></i> Contact";
ViewData["PageDescription"] = "Please reach out and let us know how you're doing";
}
<div class="fs-lg fw-300 p-5 bg-white border-faded rounded mb-g">
@using (@Html.BeginForm("SendEmail", "Contact", new { area = "" }))
{
// Name
<div class="form-group">
@Html.LabelFor(x => x.FirstName, "First Name")
@Html.TextAreaFor(x => x.FirstName, new { @class = "form-control" })
</div>
// Email
<div class="form-group">
@Html.LabelFor(x => x.Email, "Email")
@Html.TextAreaFor(x => x.Email, new { @class = "form-control" })
</div>
// Category
<div class="form-group">
@{
var list = new List<SelectListItem>()
{
new SelectListItem("Common", ContactFormViewModel.InquiryType.Common.ToString()),
new SelectListItem("Question", ContactFormViewModel.InquiryType.Question.ToString()),
new SelectListItem("Error", ContactFormViewModel.InquiryType.Error.ToString()),
new SelectListItem("Advertising", ContactFormViewModel.InquiryType.Advertising.ToString()),
new SelectListItem("Other", ContactFormViewModel.InquiryType.Other.ToString()),
};
}
@Html.LabelFor(x => x.ContactType, "Contact Type")
@Html.DropDownListFor(x => x.ContactType, list, new { @class = "form-control"})
</div>
// Body
<div class="form-group">
@Html.LabelFor(x => x.Message, "Message")
@Html.TextAreaFor(x => x.Message, new { @class = "form-control" })
</div>
// Submit
<button type="submit" class="btn btn-primary">Submit</button>
}
</div>
点击“提交”总是发回给:/fantasyfootball/Contact/SendEmail
<form action="/fantasyfootball/Contact/SendEmail" method="post"></form>
不确定这是否重要,但这是我的 startup.cs 路由配置:
// Route for printable sheets since they have the /cheatsheet/ static portion
endpoints.MapControllerRoute(
name: "FantasyFootballPrintable",
pattern: "{area:exists}/{controller=printable}/cheatsheet/{action=index}");
// The generic route for the Fantasy Football Route
endpoints.MapControllerRoute(
name: "FantasyFootball",
pattern: "{area:exists}/{controller=cheatsheet}/{action=custom}/{id?}");
// Setting the default route in the area
endpoints.MapControllerRoute(
name: "DefaultFantasyFootball",
pattern: "{area=fantasyfootball}/{controller=cheatsheet}/{action=custom}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=HtmlHelper}/{action=Index}/{id?}");
解决方案
您可以使用 BeginRouteForm 方法代替 BeginForm 方法。它将生成操作链接:
表单动作="/Contact/SendEmail" 方法="post"
这是一个示例。希望能帮到你,我的朋友:))
@model MvcCore5.ViewModels.ContactFormViewModel
@{
}
<div class="fs-lg fw-300 p-5 bg-white border-faded rounded mb-g">
@using (Html.BeginRouteForm(
routeName: "default",
method: FormMethod.Post,
routeValues: new { action = "SendEmail", controller = "Contact", area = "" }
))
{
// Name
<div class="form-group">
@Html.LabelFor(x => x.FirstName, "First Name")
@Html.TextAreaFor(x => x.FirstName, new { @class = "form-control" })
</div>
// Email
<div class="form-group">
@Html.LabelFor(x => x.Email, "Email")
@Html.TextAreaFor(x => x.Email, new { @class = "form-control" })
</div>
// Body
<div class="form-group">
@Html.LabelFor(x => x.Message, "Message")
@Html.TextAreaFor(x => x.Message, new { @class = "form-control" })
</div>
// Submit
<button type="submit" class="btn btn-primary">Submit</button>
}
</div>
推荐阅读
- javascript - Flutter:在读取 Firebase 数据时进行异步操作
- node.js - AWS Lambda GraphicsMagick 错误:找不到 gm/convert 二进制文件”
- bash - /etc/passwd Bash Shell 的输出
- c# - 如何将值截断到一定的小数位数?
- vba - 如何将 Outlook 中的焦点移至使用 VBA 的电子邮件列表?
- components - UML 中定义接口但不需要或提供接口的组件
- java - 春季启动 java.lang.ClassNotFoundException
- centos - 找出缺少哪个课程
- docker - 没有这样的主机:registry-1.docker.io
- c# - WPF 错误:运算符“<=”不能应用于“对象”和“对象”类型的操作数