我有一个具有 3 个重载的 Controller ,用于创建方法:

public ActionResult Create() {}
public ActionResult Create(string Skill, int ProductId) {}
public ActionResult Create(Skill Skill, Component Comp) {}

在我的一个观点中,我想创建这个东西,所以我这样称呼它:
<div id="X">
@Html.Action("Create")
</div>

但我收到错误:



但是由于 @html.Action() 没有传递参数,所以应该使用第一个重载。这对我来说似乎并不模棱两可(这仅意味着我不像 c# 编译器那样思考)。

谁能指出我方法的错误?

最佳答案

默认情况下,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) {}

See also this Q&A

关于c# - 解决歧义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7831896/

10-09 18:53