ASP.NET MVC: член с такой же подписью уже существует ошибка - PullRequest
2 голосов
/ 16 сентября 2010

У меня два контроллера с одинаковым именем. Один с [получить], а другой с [сообщение]. Эти два выполняют совершенно разные функции. Почему они не могут быть одинаковыми?

        [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 ]

6 голосов
/ 16 сентября 2010

Они не могут быть одинаковыми по имени только из-за обычных правил компилятора C # для перегрузок с одинаковыми именами и сигнатурами.вместо этого используйте атрибут [ActionName] при второй перегрузке:

[ActionName("AddCriteriaItem")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveCriteriaItem(CriteriaItemAddFormCollection ciafc)
1 голос
/ 16 сентября 2010

Ошибка происходит от компилятора C #, который не учитывает атрибуты для перегрузки метода. Кроме того, пользовательские атрибуты непрозрачны для компилятора - он не может знать, что они означают.

В любом случае, вы на самом деле не добавляете элементы в метод GET - имеет смысл называть это как-то вроде ViewCriteriaItemAddForm()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...