C# ASP.NET MVC:具有相同签名的成员已存在错误
我有两个同名的控制器。一个带[get],另一个带[post]。这两个执行完全不同的功能。为什么它们不能是同一个名字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(
[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())而不接受参数吗?这里发布了一个类似问题的不同答案: