我有一个表单,点击提交后应该调用AddProduct方法
查看
@using (Html.BeginForm("AddProduct", "Home", FormMethod.Post))
问题出在控制器上。具有指定的路线。
在这种情况下,当我单击Submit时,不会调用AddProduct,而是调用Index
家庭控制器
[Route("{name?}/{adminCode?}")]
public IActionResult Index(string name, string adminCode)
[HttpPost]
public ActionResult AddProduct(string productName)
如何正确调用AddProduct方法?
由于可选路由参数和索引操作中缺少HTTP谓词,您最有可能遇到路由冲突。
第一种选择是在操作上使用适当的路由属性。
[Route("[controller]")]
public HomeController {
[HttpGet("{name?}/{adminCode?}")]
public IActionResult Index(string name, string adminCode) {
//...
}
[HttpPost]
public ActionResult AddProduct(string productName) {
//...
}
}
这样,当发布时,它将只考虑可以处理post请求的操作。
我建议的另一个选项是将AddProduct
移动到一个单独的控制器(如ProductController(。
家庭控制器
[Route("[controller]")]
public HomeController {
[HttpGet("{name?}/{adminCode?}")]
public IActionResult Index(string name, string adminCode) {
//...
}
}
产品控制器
[Route("[controller]")]
ProductController {
[HttpPost]
public ActionResult AddProduct(string productName) {
//...
}
}
并相应地更新视图
@using (Html.BeginForm("AddProduct", "Product", FormMethod.Post))
除此之外,关于你在这里实际想要实现的目标,还没有足够的细节,所以我还建议添加更多关于主要目标的细节,以便提供更有针对性的答案。
由于路由配置错误,控制器看不到您有AddProduct操作,并将默认的Index操作与AddProduct一起使用作为名称参数。所以尝试添加一个路线到AddProduct太
[Route("~/Home/AddProduct")]
public ActionResult AddProduct(string productName)
如果问题通过其他操作继续存在。请张贴您的控制器标题和配置路线代码。可能需要修复。