У меня есть форма поиска с фильтрами. 1 фильтр - это диапазон, который должен быть выпадающим с номерами. У меня есть представление с использованием viewmodal с неисчислимым диапазоном поиска (моя таблица БД), и в контроллере я заполняю это, и все работает как надо ... до тех пор, пока форма не отобразится, и пользователь не попытается снова отфильтровать, в этом случае мой представление модели теперь не имеет значения. Почему он теряет ценности. Нужно ли повторно вводить это каждый раз, когда пользователи выполняют новый фильтр ... если это так, то это можно сделать без повторных обращений к базе данных, поскольку значения в раскрывающемся списке не изменятся.
модальный вид
public class SearchResultsViewModel
{
public int? Page { get; set; }
public penguin.Models.Job Job { get; set; }
public IPagedList<Models.Job> SearchResults { get; set; }
public string SearchButton { get; set; }
[Display(Name = "keywords")]
public string keywords { get; set; }
[Display(Name = "location")]
public string location { get; set; }
public int RangeID { get; set; }
public IEnumerable<Models.SearchRange> Range { get; set; }
}
Контроллер
const int RecordsPerPage = 25;
public ActionResult Jobs(ViewModels.SearchResultsViewModel model)
{
// do something with the search value
if (!string.IsNullOrEmpty(model.SearchButton) || model.Page.HasValue)
{
var entities = new Models.DBDataContext();
var results = entities.Jobs;
var pageIndex = model.Page ?? 1;
model.SearchResults = results.ToPagedList(pageIndex, 25);
//Range = ViewData["Range"] as IEnumerable<Models.SearchRange>;
}
else {
var Data = Helpers.ModelHelpers.GetDataContext();
var ranges = (from r in Data.SearchRanges select r);
model.Range = ranges;
//Range = ranges;
}
//ViewData["Range"] = Range;
//model.Range = Range;
return View(model);
}
View
@using PagedList.Mvc;
@model ViewModels.SearchResultsViewModel
@{
ViewBag.Title = "Jobs";
}
@section search {
@using (Html.BeginForm("Jobs", "Search", FormMethod.Post, new { id = "searchForm" }))
{
<fieldset>
@Html.LabelFor(m => m.keywords)
@Html.TextBoxFor(m => m.keywords)
@Html.LabelFor(m => m.location)
@Html.TextBoxFor(m => m.location)
@Html.DropDownListFor(m => m.RangeID, new SelectList(Model.Range, "ID", "Range", 5))
<input name="SearchButton" type="submit" value="Search" />
</fieldset>
}
}
<h2>
Jobs</h2>
<div id="resultContainer">
my paged results set will go in here with a link to view job details. I then want
it to come back here and not lose anything
@* html.Action("Results", "Search")*@
@if (Model.SearchResults != null && Model.SearchResults.Count > 0)
{
foreach (var result in Model.SearchResults)
{
<hr />
<table width="100%">
<tr>
<td valign="top">
<div style="font-weight: bold; font-size: large;">
@Html.Raw(@result.Title.Truncate(50))</div>
@Html.Raw(@result.summary.Truncate(50))<br />
</td>
</tr>
</table>
}
<hr />
@Html.PagedListPager(Model.SearchResults, page => Url.Action("Jobs", new RouteValueDictionary() {
{ "Page", page },
{ "Job", Model.Job }
}), PagedListRenderOptions.DefaultPlusFirstAndLast)}
</div>