在asp.net mvc中的Action中有歧义,如何解决?

时间:2012-10-11 14:06:57

标签: c# asp.net .net asp.net-mvc

我有两种方法:

public ActionResult Index(int? id)
{
    return Redirect("/View/" + this.GetMenuItems().First().Id);
}

public ActionResult Index(int id, uint? limit)
{

当我去 / View / 1 时 - 我收到了该错误

他对控制器类型'ViewController'的当前操作请求'Index'在以下操作方法之间是不明确的: System.Web.Mvc.ActionResult索引(System.Nullable 1[System.Int32]) on type SVNViewer.Controllers.ViewController System.Web.Mvc.ActionResult Index(Int32, System.Nullable 1 [System.UInt32])类型SVNViewer.Controllers.ViewController

我需要这两种方法但删除不明确的错误,我该怎么做?

3 个答案:

答案 0 :(得分:2)

将您的第二个动作更改为没有可以为空的uint。

public ActionResult Index(int id, uint limit)

如果limit为null,则Index(int? id)应该是处理的方法。

答案 1 :(得分:2)

您可以使用ActionName解决此问题:Purpose of ActionName

如果两者都做同样的事情,你可以改为:

public ActionResult Index(int? id, uint? limit = null)
{
  ...
}

使第二个参数可选。

或者有一个[HttpGet]属性,一个有[HttpPost],如果一个响应一个get而另一个响应一个已发布的表单。

答案 2 :(得分:1)

您可以创建一个模型并只有一个操作方法:

public class MyActionModel 
{
    public int? Id { get;set; }
    public int? Limit { get;set; }
}

然后在你的控制器中:

public ActionResult Index(MyActionModel model)
{
    // Your code here
    if (model.Id.HasValue() { // do something....etc}
}