控制器类型{x}上的当前动作请求{x}是不明确的

时间:2014-07-17 13:36:40

标签: c# asp.net-mvc

这是完整的错误:

The current request for action 'Index' on controller type 'ClientController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Index(System.String) on type MVCTest.Controllers.ClientController
System.Web.Mvc.ActionResult Index() on type MVCTest.Controllers.ClientController

非常非常新的MVC,我在尝试将搜索栏应用于数据表时不断收到此错误。

控制器:

    public ActionResult Index(string SearchString)
    {
        var Client = from c in db.Clients

                     select c;

        if (!String.IsNullOrEmpty(SearchString))
        {
            Client = Client.Where(s => s.Name.Contains(SearchString));
        }

        return View(Client);
    }

HTML:

<p>
@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm())
{
<p>
    Title: @Html.TextBox("SearchString") <br />
    <input type="submit" value="Filter" />
</p>
}

任何人都知道如何解决这个问题我已经困惑了一段时间了。

2 个答案:

答案 0 :(得分:1)

使用属性装饰你的行动,告诉它是采取行动还是采取行动:

[HttpGet]
  public ActionResult Index()
  {

        return View();
  }  

  [HttpPost]
  public ActionResult Index(string SearchString)
  {
        var Client = from c in db.Clients

                     select c;

        if (!String.IsNullOrEmpty(SearchString))
        {
            Client = Client.Where(s => s.Name.Contains(SearchString));
        }

        return View(Client);
   }

答案 1 :(得分:0)

可能你错过了带有字符串参数的

通常,您希望Index()操作方法返回一个视图以响应GET请求。该视图呈现一个表单,该表单将POST到名为Index的操作方法。你希望它最终得到一个带字符串参数的那个。

ASP.NET不知道要使用哪两种方法。 [HttpPost]属性告诉它使用一个用于POST,另一个用于GET。