解决歧义
我有一个控制器,有3个重载的create方法:
public ActionResult Create() {} public ActionResult Create(string Skill, int ProductId) {} public ActionResult Create(Skill Skill, Component Comp) {}
在我的一个观点中,我想创建这个东西,所以我称之为:
@Html.Action("Create")
但我得到错误:
{“控制器类型’XController’上的当前操作请求’Create’在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类型X.Web.Controllers.XController上的Create()System.Web.Mvc.ActionResult在类型X.Web.Controllers.XController上创建(System.String,Int32)System.Web.Mvc.ActionResult在类型X.Web.Controllers上创建(X.Web.Models.Skill,X.Web.Models.Component)。 XController“}
但由于@html.Action()
没有传递任何参数,因此应该使用第一个重载。 它对我来说似乎并不含糊(这只意味着我不认为像ac#编译器)。
任何人都可以指出我的方式错误吗?
默认情况下,ASP.NET MVC不支持重载方法。 您必须使用差异操作或可选参数。 例如:
public ActionResult Create() {} public ActionResult Create(string Skill, int ProductId) {} public ActionResult Create(Skill Skill, Component Comp) {}
将改为:
// [HttpGet] by default public ActionResult Create() {} [HttpPost] public ActionResult Create(Skill skill, Component comp, string strSkill, int? productId) { if(skill == null && comp == null && !string.IsNullOrWhiteSpace(strSkill) && productId.HasValue) // do something... else if(skill != null && comp != null && string.IsNullOrWhiteSpace(strSkill) && !productId.HasValue) // do something else else // do the default action }
要么:
// [HttpGet] by default public ActionResult Create() {} [HttpPost] public ActionResult Create(string Skill, int ProductId) {} [HttpPost] public ActionResult CreateAnother(Skill Skill, Component Comp) {}
要么:
public ActionResult Create() {} [ActionName("CreateById")] public ActionResult Create(string Skill, int ProductId) {} [ActionName("CreateByObj")] public ActionResult Create(Skill Skill, Component Comp) {}
另见此问答
您可以使用ActionName
属性为所有3种方法指定不同的操作名称
- 将AjaxOnlyAttribute和ChildActionOnlyAttribute组合到一个动作filter中
- 使用和枚举。 MVC3 ASP.Net中的自定义HtmlHelper
- 使用带有SignalR的Autofac时的范围错误
- 如何在MVC3中的TemplateEditor中向模型属性添加validation属性
- 今天,Visual Studio 2010中的unit testing有哪些首选选项?
- 你如何在asp.net mvc中做webforms的autopostbackfunction?
- 使用属性validation
- 如何将JavaScript文件的链接添加到某个ASP .NET MVC页面的标题中
- 如何将静态文本设置为JsonResult?