C# 如何阻止BeginForm()引用ASP.NET核心MVC应用程序中的区域?
我正在创建一个任何区域之外的联系人页面,但是当我使用C# 如何阻止BeginForm()引用ASP.NET核心MVC应用程序中的区域?,c#,.net-core,asp.net-core-mvc,C#,.net Core,Asp.net Core Mvc,我正在创建一个任何区域之外的联系人页面,但是当我使用@Html.BeginForm帮助程序时,它会继续添加我的一个区域的名称 我的控制器位于/contact/index public class ContactController : Controller { public IActionResult Index() { var contactForm = new ContactFormViewModel(); re
@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();
}
}
我的索引
联系人视图:
@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>
不确定这是否重要,但以下是我的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?}");
您可以将
default
端点放在顶部。实际上,在DefaultFantasyFootball
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=HtmlHelper}/{action=Index}/{id?}");
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?}");
您可以将
default
端点放在顶部。实际上,在DefaultFantasyFootball
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=HtmlHelper}/{action=Index}/{id?}");
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?}");
您可以使用BeginRouteForm方法而不是BeginInform方法。 它将生成操作链接: form action=“/Contact/sendmail”method=“post” 这是一个样本。希望能帮上忙,我的朋友:))
@model MvcCore5.ViewModels.ContactFormViewModel
@{
}
@使用(Html.BeginRouteForm)(
路由名称:“默认值”,
方法:FormMethod.Post,
routeValue:new{action=“sendmail”,controller=“Contact”,area=”“}
))
{
//名字
@Html.LabelFor(x=>x.FirstName,“First Name”)
@TextAreaFor(x=>x.FirstName,新的{@class=“form control”})
//电子邮件
@Html.LabelFor(x=>x.Email,“Email”)
@Html.TextAreaFor(x=>x.Email,新的{@class=“form control”})
//身体
@LabelFor(x=>x.Message,“Message”)
@TextAreaFor(x=>x.Message,新的{@class=“formcontrol”})
//提交
提交
}
您可以使用BeginRouteForm方法而不是BeginInfo方法。
它将生成操作链接:
form action=“/Contact/sendmail”method=“post”
这是一个样本。希望能帮上忙,我的朋友:))
@model MvcCore5.ViewModels.ContactFormViewModel
@{
}
@使用(Html.BeginRouteForm)(
路由名称:“默认值”,
方法:FormMethod.Post,
routeValue:new{action=“sendmail”,controller=“Contact”,area=”“}
))
{
//名字
@Html.LabelFor(x=>x.FirstName,“First Name”)
@TextAreaFor(x=>x.FirstName,新的{@class=“form control”})
//电子邮件
@Html.LabelFor(x=>x.Email,“Email”)
@Html.TextAreaFor(x=>x.Email,新的{@class=“form control”})
//身体
@LabelFor(x=>x.Message,“Message”)
@TextAreaFor(x=>x.Message,新的{@class=“formcontrol”})
//提交
提交
}
此解决方案有效。看起来助手使用第一个非忽略路由来生成链接。如果结果是重新排列路线会干扰我现有的导航,我将不得不使用BeginRouteForm,因为@Tomato32建议此解决方案有效。看起来助手使用第一个非忽略路由来生成链接。如果结果是重新排列路线会影响我现有的导航,我将不得不使用@Tomato32建议的BeginRouteForm
@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>