【发布时间】:2017-10-31 01:18:25
【问题描述】:
我的最终目标是将强类型模型(以填充下拉菜单)和模型列表(基于搜索查询)同时从控制器传递给视图。我将其传递给的视图是“Clear()”视图。目前在我的 HomeController.cs 我有:
public ActionResult Clear()
{
var states = GetAllStates();
var model = new ProjectClearanceApp.Models.Project();
model.States = GetSelectListItems(states);
return View(model);
}
private IEnumerable<string> GetAllStates()
{
return new List<string>
{
"AL",
// ... (you get the point)
"WY",
};
}
private IEnumerable<SelectListItem> GetSelectListItems(IEnumerable<string> elements)
{
var selectList = new List<SelectListItem>();
foreach (var element in elements)
{
selectList.Add(new SelectListItem
{
Value = element,
Text = element
});
}
return selectList;
}
我在某处读到,这是获取下拉菜单选项列表的最佳方式。现在我还想根据搜索查询将模型列表传递给同一视图(Clear.cshtml)。我正在阅读from this Microsoft tutorial 以通过添加在控制器操作中搜索该视图
public ActionResult Index(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
到控制器。如何将下拉选项列表和适合搜索的模型列表从控制器传递到视图(或者,如何在不从控制器传递两者的情况下实现相同的效果)?
【问题讨论】:
-
通过另一个封装它们的模型
-
没有任何理由写
from x in y select x。 -
@SLaks 这是一个很好的观点。如何重写
select语句以在选择而不是从数据库中获取完整的电影列表然后搜索时进行搜索? -
@B.Fitzgerald
var movies = db.Movies.AsQueriable(); -
@B.Fitzgerald 你不需要做任何事情。访问
db.Movies在您枚举之前不会加载任何内容。
标签: c# asp.net asp.net-mvc visual-studio razor