[英].net core not routing to POST method
链接到项目 - > https://github.com/crumdev/hqbbq.git
我有一个简单的3页MVC网站,有1个控制器。 对于联系页面,我有一个小的3输入表单。 以下是Controller方法:
[Route("contact/")]
public IActionResult Contact()
{
return View();
}
[HttpPost]
public IActionResult Contact(string name, string email, string message)
{
ViewBag.Name = name;
ViewBag.Email = email;
ViewBag.Message = message;
return View();
}
当我在HttpPost的Contact方法中提交带有断点的表单时,它永远不会中断,而是使用常规方法并再次返回视图。 我已经尝试将我的表单简化为name字段,只捕获它并且它不会进入POST方法。 我给了常规的Contact方法[HttpGet]属性,所以它只能严格用于GET请求,当我提交表单时,它会完全绕过我的控制器并返回除了“Hello World!”之外的空白的异常页面。 屏幕上。 我已经阅读了文档,并在teamtreehouse.com上阅读了常规ASP.Net的教程,但是无法理解为什么它会以这种方式运行。
编辑:这是提交POST的页面的代码。 我只是使用一个纯HTML表单和POST方法来提交数据。
https://github.com/crumdev/hqbbq/blob/master/HQ-BBQ/Views/Home/contact.cshtml
如果打算使用属性路由,则POST操作也需要具有路由。
[HttpGet]
[Route("contact")]
public IActionResult Contact() {
return View();
}
[HttpPost]
[Route("contact")]
public IActionResult Contact(string name, string email, string message) {
ViewBag.Name = name;
ViewBag.Email = email;
ViewBag.Message = message;
return View();
}
请注意,不需要删除斜杠。 确保表单输入的名称和ID与目标操作的参数匹配
看起来你在[HttpPost]
方法上缺少Route
属性。 试试这个。
[HttpPost]
[Route("contact/")]
public IActionResult Contact(string name, string email, string message)
还要更新视图代码,以便<input />
标记的name
属性与控制器操作的参数匹配。
请记住,MVC使用name属性绑定到控制器操作中的参数。 MSDN模型绑定
例如,更新您的电子邮件输入以包含name属性:
<input name="email" id="email" class="input" type="text" placeholder="Email" value="@ViewBag.Email">
您还需要将文本区域名称更新为name="message"
。
您可以在控制器发布方法中使用FromForm注释作为参数
[HttpPost]
[Route("contact")]
public IActionResult Contact([FromForm]string name, [FromForm]string email, [FromForm]string message)
我还建议使用视图模型,而不是将表单的所有字段作为参数传递。 想象一下,你有一个包含10个字段的表单,你的方法签名将更难以阅读
我无法路由到行动,因为我传递了与模型不匹配的对象,例如
public class NewsModel : IActive
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string NewsName { get; set; }
public string NewsText { get; set; }
public bool Active { get; set; }}
{"id":0,"newsName":"123","newsText":"123","active":""}
active - 应该是boolean,但我传递了字符串。 首先,我要做的是删除Post方法中的参数。
[HttpPost] public async Task<IActionResult> PostNews( )
如果现在你开始行动,那么你在模型中有问题,否则 - 你在路由方面有问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.