我是ASP.NET MVC的新手。
我刚刚创建了一个经典的MVCMovie应用程序。
现在,我想添加更多功能,仅供学习。
我按照流派搜索电影的"SearchByGen"
视图:在视图中有一个类型的下拉列表和一个DIV占位符。占位符的内容由jQuery由PartialView "SearchByGenGetResult"
加载,一切正常。
问题是:
这是架构正确吗?
如何通过调用View来映射URL中PartialView的值(例如,如果我通过DropDown选择搜索"horror"
我希望在URL中看到类似{{ 1}},我想正确看到结果和选择DropDown选项访问"SearchByGen/horror"
页面
感谢大家,现在代码:
控制器代码:
"SearchByGen/horror"
查看SearchByGen
public ActionResult SearchByGen()
{
//get the genres list
var totalGens = _repository.GetGenrs();
//put into List<SelectListItem> for @Dropdown it
List<SelectListItem> items = totalGens.Select(genere => new SelectListItem { Text = genere, Value = genere }).ToList();
//passing to the View
ViewBag.TotalGen = items;
return View();
}
public ActionResult SearchByGenGetResult(string gen)
{
//select movies by gen
var moviesByGen = _repository.GetByGen(gen);
//render partial view
return PartialView(moviesByGen);
}
部分查看SearchByGenGetResult(未显示,经典脚手架列表视图)
答案 0 :(得分:0)
您可以通过使用FormMethod.Get的表单来执行此操作,以便生成正确的URL(并添加到浏览器历史记录中)。您只需要一种方法,并且应该使用视图模型来表示要在视图中显示的内容
public class MovieVM
{
public string Genre { get; set; }
public SelectList GenreList { get; set; }
public IEnumerable<Movie> Movies { get; set; }
}
public ActionResult Index(string genre)
{
var genreList = _repository.GetGenrs(); // assume this returns IEnumerable<string>
genre = genre ?? genreList.First();
MovieVM model = new MovieVM
{
Genre = genre,
GenreList = new SelectList(genreList),
Movies = _repository.GetByGen(genre)
};
return View(model)
}
@model MovieVM
....
@using (Html.BeginForm("Index", "Movie", FormMethod.Get))
{
@Html.LabelFor(m => m.Genre)
@Html.DropDownListFor(m => m.Genre, Model.GenreList)
<input type="submit" value="Search" />
}
<div id="movies">
@foreach (var movie in Model.Movies)
{
....
}
</div>
或者,如果你想使用ajax(由于大部分html都在电影列表中,可能没有很多性能优势),你需要使用History.js或类似的插件,如this answer及其相关链接
答案 1 :(得分:0)
首先,
Architecture can be change to your project But you can look these title;
第二个问题答案;
public PartialViewResult SearchByGenGetResult(string gen)
{
//select movies by gen
var moviesByGen = _repository.GetByGen(gen);
//render partial view
return PartialView(moviesByGen);
}
查看脚本;
var dropDownSelected = $("#TotalGen option:selected").text();
var url = '@Url.Action("SearchByGenGetResult", "Home")/' + dropDownSelected ;
$('#viewPlaceHolder').load(url);