在一个控制器上,您最多只能有两个具有相同名称的 *** 作方法,而要做到这一点,必须为1
[HttpPost],另一个必须为
[HttpGet]。
由于两种方法都是GET,因此您应该重命名其中一种 *** 作方法或将其移至其他控制器。
尽管您的2个浏览方法是有效的C#重载,但MVC *** 作方法选择器无法确定要调用的方法。它将尝试将路由与该方法匹配(反之亦然),并且该算法不是强类型的。
您可以使用指向不同 *** 作方法的自定义路由来完成所需的 *** 作:
…在Global.asax中
routes.MapRoute( // this route must be declared first, before the one below it "StartBrowse", "Gallery/Browse/Start/Here", new { controller = "Gallery", action = "StartBrowse", });routes.MapRoute( "ActualBrowse", "Gallery/Browse/{searchterm}", new { controller = "Gallery", action = "Browse", searchterm = UrlParameter.Optional });
…以及在控制器中…
public ActionResult Browse(string id){ var summaries = return View(summaries);}public ActionResult StartBrowse(){ var summaries = return View(summaries);}
您还可以通过将属性应用于一个属性来区分它,从而在控制器中使名称相同的动作方法保持相同
[ActionName]。使用与上述相同的Global.asax,您的控制器将如下所示:
public ActionResult Browse(string id){ var summaries = return View(summaries);}[ActionName("StartBrowse")]public ActionResult Browse(){ var summaries = return View(summaries);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)