1

我尝试为 diff 参数定义操作,但它不起作用:

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return  View();
    }

    public ActionResult Index(string name)
    {
      return new JsonResult();
    }

    public ActionResult Index(string lastname)
    {
      return new JsonResult();
    }

    public ActionResult Index(string name, string lastname)
    {
      return new JsonResult();
    }
    public ActionResult Index(string id)
    {
      return new JsonResult();
    }
 }

但我得到错误:

当前对控制器类型“HomeController”的操作“Index”的请求在以下操作方法之间不明确......

编辑:

如果不可能,请建议最好的方法。

谢谢,

约瑟夫

4

3 回答 3

1

您可以使用以下ActionNameAttribute属性:

[ActionName("ActionName")]

然后,每个 Action 方法都有不同的名称。

于 2012-09-09T13:54:32.497 回答
1

当它们响应相同类型的请求(GET、POST 等)时,您不能重载操作方法。您应该有一个包含所有您需要的参数的公共方法。如果请求没有提供它们,它们将为空,您可以决定可以使用哪个重载。

对于这个单一的公共方法,您可以通过定义模型来利用默认模型绑定。

public class IndexModel
{
    public string Id { get; set;}
    public string Name { get; set;}
    public string LastName { get; set;}
}

这是您的控制器的外观:

public class HomeController : Controller
{
    public ActionResult Index(IndexModel model)
    {
        //do something here
    }
}
于 2012-09-09T13:54:55.043 回答
1

这两者不能在一起,因为编译器无法区分它们。重命名它们或删除一个,或者添加一个额外的参数。这适用于所有课程。

public ActionResult Index(string name) 
{ 
  return new JsonResult(); 
} 

public ActionResult Index(string lastname) 
{ 
  return new JsonResult(); 
}

尝试使用具有默认参数的单个方法:

    public ActionResult Index(int? id, string name = null, string lastName = null)
    {
        if (id.HasValue)
        {
            return new JsonResult();
        }

        if (name != null || lastName != null)
        {
            return new JsonResult();
        }

        return View();
    }

或者

    public ActionResult Index(int id = 0, string name = null, string lastName = null)
    {
        if (id > 0)
        {
            return new JsonResult();
        }

        if (name != null || lastName != null)
        {
            return new JsonResult();
        }

        return View();
    }
于 2012-09-09T13:56:20.863 回答