發送一個值來控制
我真的只是一直在創造我的形式的「搜索」 /過濾器選項;使用類似:
查看
@using (Html.BeginForm())
{
<div>
<hr />
Search
<hr />
Name: @Html.TextBox("SearchString", null, new { @id = "thisID" })<a style="float:right; margin-top:8px" href="@Url.Action("Index", "ControllerName")">
<br />
<input type="submit" value="Filter" id="subBtn" />
<hr />
</div>
}
隨着我的控制器代碼是:
[Authorize]
public ActionResult Index()
{
return View(db.Traders.ToList());
}
[HttpPost]
public ActionResult Index(string searchString)
{
var traders = from m in db.Traders //db is my Database Entities
select m;
if (!String.IsNullOrEmpty(searchString))
{
traders = traders.Where(s => s.Name.Contains(searchString));
}
return View(traders);
}
所以我的控制器將獲得該文本框的值作爲方法的一部分。
過濾使用搜索和/或組合框(或兩者的一個或沒有)
我實際使用this site實現一個基本的搜索/過濾系統爲我的項目。它幫助很大。
它使用ViewBag
允許您創建一個組合框,然後您可以選擇並返回選定的值到您的[HttpPost]操作方法 - 非常適合您的過濾/搜索需要!
這意味着您不必將完整的模型發送回您的控制器,而是通過一個「搜索術語」,然後您可以在您的控制器方法中使用它,並輕鬆地在您的方法中獲得匹配的模型(類似於發送單值如第一個例子)。然後
你的操作方法可能如下:
public ActionResult Index(string movieGenre, string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (!string.IsNullOrEmpty(movieGenre))
{
movies = movies.Where(x => x.Genre == movieGenre);
}
return View(movies); //returns movies matching results
}
發送完整型號爲控制器
在傳遞一個全控制器的幫助方面,你可能會發現this tutorial因爲它創建了基本的CRUD操作(「創建」允許您將單個模型傳遞給控制器)。
在「回傳」行動方法,你需要「綁定」的數據,如:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate")]Student student)
{
//do stuff with this model
return redirectToAction("Index");
}
這上面的鏈接進行進一步的解釋。
啊,我很害怕。我只是希望這是一個更簡單的出路:) 我會在一段時間嘗試一下,然後接受這個答案,如果它的工作!謝謝! – 2014-10-08 08:30:35
是的,它的工作原理,我現在就會使用它。我可能會盡快將此更改爲更高效的方式,但因爲我只需要快速修復!謝謝您的幫助! – 2014-10-08 11:18:53