我有两个同名的控制器.一个有[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();
}
Run Code Online (Sandbox Code Playgroud)
它们不能仅仅因为具有完全相同名称和签名的重载的正常C#编译器规则而成为相同的名称.使用第二个重载的[ActionName]属性:
[ActionName("AddCriteriaItem")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveCriteriaItem(CriteriaItemAddFormCollection ciafc)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |