2 Stimmen

ASP.NET MVC: Mitglied mit der gleichen Signatur bereits vorhanden Fehler

Ich habe zwei Controller mit dem gleichen Namen. Einer mit einem [get] und der andere mit einem [post]. Diese beiden führen völlig unterschiedliche Funktionen aus. Warum können sie nicht den gleichen Namen haben?

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

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

            // Gruppe oder Registerkarte hinzufügen
            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();
        }

6voto

Steve Michelotti Punkte 5203

Sie können nicht denselben Namen haben, nur wegen der normalen C#-Compilerregeln für Überladungen mit genau demselben Namen und derselben Signatur. Verwenden Sie stattdessen das [ActionName]-Attribut für die zweite Überladung:

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

1voto

Mark Cidade Punkte 95914

Der Fehler stammt vom C#-Compiler, der keine Attribute für die Methodenüberladung berücksichtigt. Außerdem sind benutzerdefinierte Attribute für den Compiler undurchsichtig - er hat keine Möglichkeit zu wissen, was sie bedeuten.

Sie fügen sowieso keine Elemente in der GET-Methode hinzu - es macht mehr Sinn, sie beispielsweise ViewCriteriaItemAddForm() zu nennen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X