C# 将输入文本传递给控制器mvc

C# 将输入文本传递给控制器mvc,c#,asp.net-mvc,model-view-controller,input,C#,Asp.net Mvc,Model View Controller,Input,我的索引页上有一个团队列表 我试图将输入文本(键入文本)从索引视图传递回索引控制器,以重新加载索引页,这次只显示列表中具有匹配文本的项。鲍勃=鲍勃 索引控制器 public ActionResult Index(string searchString) { ViewBag.Message = "Welcome to ASP.NET MVC!"; var listOfTeams = from T in db.Teams

我的索引页上有一个团队列表

我试图将输入文本(键入文本)从索引视图传递回索引控制器,以重新加载索引页,这次只显示列表中具有匹配文本的项。鲍勃=鲍勃

索引控制器

  public ActionResult Index(string searchString)        
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";


        var listOfTeams = from T in db.Teams
                     select T; 

        if (!String.IsNullOrEmpty(searchString))
        {
            listOfTeams = listOfTeams.Where(T => T.TeamName.Contains(searchString));

        }


        return View(listOfTeams.ToList());

    }
如何在索引视图中传递数据

我试过了

 <input type="text" id="inputTeamSearch" name="searchString" class="form-control" style="width:225px;height:60px" onblur="IsTextEmpty()" oninput="CheckTeams()" placeholder="Search">
@Html.ActionLink("Search", "Index")

@ActionLink(“搜索”、“索引”)

@使用(Html.BeginForm(“索引”、“团队”))
{
Html.EndForm();
} 

我相信这可能是某种形式的复制品,如果是这样的话,请在适当的方向上递给我。我一直在寻找答案,但答案要么冗长,要么涉及到比这更复杂的细节。

因此,要将数据发布到控制器,您需要一个单独的post操作,该操作带有HttpPost属性。此方法需要将模型作为其参数:

[HttpPost]
Public ActionResult Index(IndexVM      model)
{
    var searchTerm = model.SearchTerm;
}
视图模型需要包含要发布的字段

Public class IndexVM
{
     Public String SearchTerm { get; set; }
    //Other model examples
    public Int32 PageNumber { get; set; }
    public Int32 NumOfItemsPerPage { get; set; }
}
然后,html需要包含一个与视图模型中的string属性同名的文本框

@Html.TextBoxFor(m => m.SearchTerm)
//And at the top of your html page you will need to include the model
@model Domain.Models.IndexVM

然后,在索引GET方法中,将团队传递给视图时,您会:

var view = new IndexVM();
view.Team = //your team object
return View(view);

什么不适合你?这是干什么用的?很抱歉没有提到。它将重新加载索引页面,但仍然显示我的所有团队,即筛选不起作用。我假设控制器中的“如果”语句永远不会被触发查看George Hamwell的答案。在第一段代码中,
@Html.ActionLink(“搜索”、“索引”)
不起作用-您没有将搜索文本的值传递给控制器。在第二种情况下,需要指定
FormMethod.Get
并删除
Html.EndForm()
(使用
@using
语句添加结束
标记)。当我在顶部包含“@model Domain.Models.IndexVM”时,我得到一个错误,说我只能声明一个要使用的模型,我需要保留我的“@model Domain.Models.Team”或者我不能显示诸如团队名称之类的信息。我最终以一种稍微不同的方式使它工作起来。感谢您抽出时间提供帮助:)
<input type="text" name="SearchTerm">
public class IndexVM
{
    public Team Team { get; set; }
    public String SearchTerm { get; set; } 
}
var view = new IndexVM();
view.Team = //your team object
return View(view);