0

我的控制器中有这两个动作:

   public ActionResult Admin()
    {
        var aux=db.UserMessages.ToList();

        return View(aux);         

    }

    public ActionResult Admin(int id)
    {
        var aux = db.UserMessages.ToList();

        return View(aux);

    }

但是当我尝试访问“localhost/Doubt/Admin”时,我收到一条消息说它模棱两可...我不明白为什么会这样...因为如果我在 Url 中没有 id,它应该调用第一个 Action没有 id 参数

4

5 回答 5

2

除非您指定ActionName属性,否则将在指定“Admin”操作时找到这两个操作。将方法与操作名称匹配时不考虑参数。

您还可以使用HttpGet / HttpPost属性指定一个用于 GET,另一个用于 POST。

 [ActionName("AdminById")]
 public ActionResult Admin(int id)

当路径包含 id 时,在路由中指定“AdminById”。

于 2013-04-02T05:52:33.143 回答
2

在同一个控制器上不可能有两个同名的动作可以用同一个动词访问(在你的例子中是 GET)。您将不得不重命名 2 个操作之一或使用HttpPost属性对其进行装饰,使其仅可用于 POST 请求。显然这不是你想要的,所以我猜你将不得不重命名第二个动作。

于 2013-04-02T05:55:29.957 回答
0

当用户查看一个页面时,这是一个 GET 请求,而当用户提交一个表单时,这通常是一个 POST 请求。HttpGetHttpPost限制一个动作方法,使该方法只处理相应的请求。

   [HttpGet]
    public ActionResult Admin()
    {
        var aux=db.UserMessages.ToList();

        return View(aux);         

    }

    [HttpPost]
    public ActionResult Admin(int id)
    {
        var aux = db.UserMessages.ToList();

        return View(aux);

    }

在您的情况下,如果您想get请求第二种方法,您最好重命名您的方法。

于 2013-04-02T05:55:09.613 回答
0
As you have define two action method with same name,it get confuse about which method to call.
so of you put request first time and in controller you have two method with same name than it will show error like you are currently getting due to it try to find method with attribute HttpGet,but you have not mention that attribute on action method,now when you post your form at that time it will try to find method with HttpPost attribute and run that method,so you have to specify this two attribute on same method name  
    Try this
    [HttpGet]
    public ActionResult Admin()
        {
            var aux=db.UserMessages.ToList();

            return View(aux);         

        }
    [HttpPost]
        public ActionResult Admin(int id)
        {
            var aux = db.UserMessages.ToList();

            return View(aux);

        }
于 2013-04-02T05:55:21.537 回答
0

在 ASP.NET MVC 中,您不能有两个具有相同名称和相同动词的操作。您可以像这样编写代码以保持代码的可读性。

private ActionResult Admin()
{
    var aux=db.UserMessages.ToList();
    return View(aux);         

}

public ActionResult Admin(int id = 0)
{
    if (id == 0)
        return Admin();

    var aux = db.UserMessages.ToList();
    return View(aux);

}
于 2013-04-02T07:20:20.037 回答