我的索引页面上有一个团队列表。
我试图将输入文本(类型文本)从索引视图传递回索引控制器,重新加载索引页面,这次只显示列表中具有匹配文本的项目。例如 - bob = bob
索引控制器
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")
和
@using(Html.BeginForm("Index", "Team"))
{
<input type="text" id="inputTeamSearch" name="searchString" class="form-control" style="width:225px;height:60px" onblur="IsTextEmpty()" oninput="CheckTeams()" placeholder="Search">
<input type="submit" id="Index" value="Index" />
Html.EndForm();
}
我确定这可能是某种形式的重复,如果是这样,请让我按照适当的方向传递给我。我已经找到了答案,但他们要么啰嗦,要么进入比这更复杂的细节。
答案 0 :(得分:2)
因此,要将数据发布到控制器,您需要使用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需要包含一个与视图模型中字符串属性同名的文本框。
@Html.TextBoxFor(m => m.SearchTerm)
//And at the top of your html page you will need to include the model
@model Domain.Models.IndexVM
OR
<input type="text" name="SearchTerm">
应该工作。
如果您已经在使用实体模型,则可以创建一个新的View模型,其中包含旧实体和您需要的任何其他内容。所以:
public class IndexVM
{
public Team Team { get; set; }
public String SearchTerm { get; set; }
}
然后在您的索引GET方法中,您将团队传递给您的视图:
var view = new IndexVM();
view.Team = //your team object
return View(view);