代码之家  ›  专栏  ›  技术社区  ›  Luke101

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

  •  2
  • Luke101  · 技术社区  · 14 年前

    我有两个同名的控制器。一个带着[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();
            }
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   Steve Michelotti    14 年前

    它们不能是相同的名称,这是因为对于具有完全相同名称和签名的重载,常规的C编译器规则。在第二个重载上改用[actionname]属性:

    [ActionName("AddCriteriaItem")]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SaveCriteriaItem(CriteriaItemAddFormCollection ciafc)
    
        2
  •  1
  •   Mark Cidade    14 年前

    错误来自C编译器,它不考虑方法重载的属性。此外,自定义属性对编译器来说是不透明的,它无法知道它们的含义。

    不管怎么说,你并不是真的在get方法中添加项目,把它称为 ViewCriteriaItemAddForm()