我是ASP.NET MVC的新手。我刚刚创建了一个经典的MVCMovie应用程序。现在,我想增加更多的功能,只是为了学习。我做了一个按类型搜索电影的"SearchByGen"视图:在视图中有一个类型下拉列表和一个DIV占位符。占位符的内容由jQuery由PartialView "SearchByGenGetResult"加载,并且一切正常。
问题如下:
"horror"通过DropDown选择搜索DropDown,我希望在URL中看到类似于"SearchByGen/horror"的内容,并且希望正确地看到结果和选择的DropDown选项访问"SearchByGen/horror"访问页面)谢谢大家,现在密码:
控制器代码:
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);
}视图SearchByGen
@model IEnumerable<MvcMovies.Models.Movie>
@{
ViewBag.Title = "Search By Gen";
}
<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.20.js")" type="text/javascript"></script>
<link href="@Url.Content( "~/content/themes/base/jquery-ui.css")" rel="Stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(
function () {
var dropDownSelectedDefault = $("#TotalGen option:selected").text();
$("#viewPlaceHolder").load("/Movie/SearchByGenGetResult", { gen: dropDownSelectedDefault });
//$("input#search").click(
$("#TotalGen").change(
function () {
var dropDownSelected = $("#TotalGen option:selected").text();
$("#viewPlaceHolder").load("/Movie/SearchByGenGetResult", { gen: dropDownSelected });
}
);
}
);
</script>
<h2>Search By Gen</h2>
<div>
@Html.DisplayName("Genere ")
@Html.DropDownList("TotalGen")
</div>
<div id="viewPlaceHolder"></div>部分视图SearchByGenGetResult (未显示,经典的支架列表视图)
发布于 2015-10-23 12:29:15
您可以使用带有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或类似于这个答案及其相关链接中描述的插件。
发布于 2015-10-23 14:28:11
首先,
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);https://stackoverflow.com/questions/33297698
复制相似问题