返回窗体的方法



我有一个表单,点击提交后应该调用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)

如果问题通过其他操作继续存在。请张贴您的控制器标题和配置路线代码。可能需要修复。

最新更新