C# ASP.NET MVC:具有相同签名的成员已存在错误

C# ASP.NET MVC:具有相同签名的成员已存在错误,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,我有两个同名的控制器。一个带[get],另一个带[post]。这两个执行完全不同的功能。为什么它们不能是同一个名字 [AcceptVerbs(HttpVerbs.Get)] public ActionResult AddCriteriaItem(CriteriaItemAddFormCollection ciafc) { return View(ciafc); } [AcceptVerbs(

我有两个同名的控制器。一个带[get],另一个带[post]。这两个执行完全不同的功能。为什么它们不能是同一个名字

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult AddCriteriaItem(CriteriaItemAddFormCollection ciafc)
        {
            return View(ciafc);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult AddCriteriaItem(CriteriaItemAddFormCollection ciafc)
        {
            string GroupName = (string)Session["SelectedGroupName"];

            //add group or tab
            switch (ciafc.CriteriaID)
            {
                case (int)enums.Criterias.Tab:
                    Template.AddTab(ciafc.TemplateID, ciafc.name, ciafc.description);
                    Response.Redirect(Server.UrlDecode(ciafc.rtn));
                    break;
                case (int)enums.Criterias.Group:
                    Template.AddGroup(ciafc.TemplateID, ciafc.name, ciafc.description, ciafc.TabName);
                    ViewData["CategoryID"] = ciafc.CategoryID;
                    Response.Redirect(Server.UrlDecode(ciafc.rtn));
                    break;
                default:
                    if (!string.IsNullOrEmpty(GroupName.ToString()) && ciafc.CriteriaID > 0 && !string.IsNullOrEmpty(ciafc.TabName))
                    {
                        Template.AddCriteriaItem(ciafc.TabName, GroupName, ciafc.name, ciafc.description, ciafc.options, ciafc.CriteriaID, ciafc.TemplateID);
                    }
                    ViewData["rtn"] = Server.UrlDecode(ciafc.rtn);
                    ViewData["TemplateID"] = ciafc.TemplateID;
                    ViewData["CategoryID"] = ciafc.CategoryID;
                    break;
            }

            Response.Redirect(Server.UrlDecode(ciafc.rtn));
            return View();
        }
错误来自C#编译器,它没有考虑方法重载的属性。此外,自定义属性对编译器来说是不透明的,它无法知道它们的含义


无论如何,您并不是真的在GET方法中添加项,将其称为类似于
ViewCriteriaItemAddForm()

的名称更为合理,因为对于具有完全相同名称和签名的重载,它们不能是相同的名称。在第二个重载上使用[ActionName]属性:

[ActionName("AddCriteriaItem")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveCriteriaItem(CriteriaItemAddFormCollection ciafc)

你真的需要GET版本吗?我的意思是,看起来您正试图将一个表单发布到一个GET方法,但这并没有真正意义。你真的想让它执行返回视图(new CriteriaItemAddFormCollection())而不接受参数吗?这里发布了一个类似问题的不同答案: