我希望链接http://localhost:2409/Account/Confirmation/16
和链接http://localhost:2409/Account/Confirmation/
(不带参数)。
但是使用此操作方法,它无效。为什么呢?
public ActionResult Confirmation(int id, string hash)
{
Some code..
return View();
}
第二,我只想返回View,如果parametr为空。
public ActionResult Confirmation()
{
return View();
}
错误(已翻译):
控制器确认的当前操作请求 AccountController在以下方法之间是不明确的 action:System.Web.Mvc.ActionResult Confirmation(Int32, System.String)用于TC.Controllers.AccountController类型 System.Web.Mvc.ActionResult类型的确认() TC.Controllers.AccountController
答案 0 :(得分:4)
您不能使用相同的HTTP谓词进行多个具有相同名称的操作(在您的情况下为GET。)您可以以不同的方式命名您的操作,但这意味着链接将更改或您可以使用不同的VERB,但这也可能导致其他像你这样的问题不能只在浏览器中输入链接。
您应该做的是将id
更改为int?
的可选项,并将您的两项操作合并为一个:
public ActionResult Confirmation(int? id, string hash)
{
if(id.HasValue)
{
//Some code.. using id.Value
return View();
}
//There was no Id given
return View();
}
您可能还需要在路线中允许id
是可选的。如果您使用的是默认路由,则应该是默认设置:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 1 :(得分:0)
没有必要为它制作2种方法。您的HTTP请求混淆了在两种情况下都应该调用ActionMethod
;
http://localhost:2409/Account/Confirmation/16
http://localhost:2409/Account/Confirmation/
而不是所有这些,只需创建一个方法。使其参数可选或为参数指定一些默认值。以下是2个例子来理解它。
// 1. Default value to paramter
public ActionResult Confirmation(int id = 0, string hash = null)
{
//Some code..
return View();
}
// 2. Make id optional
public ActionResult Confirmation(int? id, string hash)
{
//Some code..
return View();
}
您可以采用任何一种方法。