2

我想要链接http://localhost:2409/Account/Confirmation/16和那个链接 http://localhost:2409/Account/Confirmation/(没有参数)。
但是使用这种操作方法,它不起作用。为什么?

    public ActionResult Confirmation(int id, string hash)
    {
         Some code..

        return View();
    }

其次,如果参数为空,我只想返回视图。

    public ActionResult Confirmation()
    {

        return View();
    }

错误(翻译):

当前对控制器 Confirmation AccountController 的操作请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Confirmation (Int32, System.String) 类型 TC.Controllers.AccountController System.Web.Mvc.ActionResult Confirmation ( ) 对于类型 TC.Controllers.AccountController

4

2 回答 2

4

您不能使用相同的 HTTP 动词(在您的情况下为 GET)拥有多个具有相同名称的操作。您可以以不同的方式命名您的操作,但这意味着链接会更改,或者您可以使用不同的动词,但这也可能导致像您这样的其他问题不能只在浏览器中输入链接。

您应该做的是将您的选项更改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 } 
);
于 2013-03-12T09:40:19.617 回答
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();
} 

您可以采用他们的任何一种方法。

于 2018-04-04T07:51:19.697 回答