ASP.NET проблема с выбранным значением MVC DropDownList
Я прочитал тонну об этой проблеме, но я не могу выяснить это.
у меня есть раскрывающийся список на моем представлении, который используется для подкачки. Вы выбираете страницу, на которую хотите перейти, и форма отправляется. Когда представление возвращается, отображается запрошенная страница. Dropdownlist изменяется, чтобы отразить новую отображаемую страницу. Это работает нормально.
моя проблема заключается в следующем: У меня 2 кнопку Submit, На следующей странице и одна на страницу Пред. В контроллере, если один из отправка была нажата, страница# должна быть увеличена или уменьшена на 1. Это происходит, и отображается правильная страница данных. Но выпадающий список не будет, независимо от того, что я делаю, отражать новый номер страницы при отображении представления.
в основном, если выпадающий список изменяется пользователем, он будет отражать эти изменения, когда он отправляется обратно после отправки формы. Если я изменю страницу # программно, раскрывающийся список не изменится, даже если правильная страница данные отображаются.
вот метод действий:
public ActionResult Results(TechSearch search, string NextPage, string PrevPage)
{
if (NextPage != null) search.Page++;
if (PrevPage != null) search.Page--;
int resultCount = search.GetResultCount(Desk);
List<int> pages = new List<int>();
int pageCount = (int)Math.Ceiling((decimal)resultCount / search.PageSize);
for (int i = 1; i <= pageCount; i++) pages.Add(i);
ViewData["pages"] = new SelectList(pages, search.Page);
ViewData["pageCount"] = pageCount;
return View(search);
}
и вот соответствующая часть вид:
<input type="submit" value="<" name="PrevPage" />
Page
<%=Html.DropDownList("Page",(SelectList)ViewData["pages"]) %>
of
<%=ViewData["pageCount"]%>
<input type="submit" value=">" name="NextPage" />
пожалуйста, помогите.
редактировать
страница 333 из Pro ASP.NET MVC Framework by Steven Sanderson:
Как Контролирует Ввод Их Значений
каждый из [HTML-помощников для рендеринга входных элементов управления] пытается заполнить себя, глядя на значение в следующих местах, в этом порядке приоритет:
- ViewData.ModelState ["controlName"].Значение.RawValue
- параметр value передается вспомогательному методу HTML, или если вы вызвали перегрузка, не включающая значение параметр, тогда ViewData.Eval ("controlName")
ModelState-это временная область хранения что ASP.NET MVC использует для сохранения входящие значения попытки плюс привязка и ошибки проверки. Уведомление что это в верхней части списка приоритетов, поэтому его значения ничего переопределять вы может установить явно. эта Конвенция означает, что вы можете передать явное значение параметра в качестве помощника по умолчанию или начальное значение; но, когда перерисовка вид после ошибка проверки, помощник будет сохранить любое введенное пользователем значение в предпочтение по умолчанию.
Я проверил, что ViewData.ModelState["Страница"].Значение.RawValue содержит неожиданную страницу номер, который надоедает мне. Какой лучший способ обойти это?
4 ответов
проблема заключалась в том, что ModelState удерживал переданное значение dropdownlist. Для входных элементов управления HtmlHelper ModelState имеет приоритет над явно заданными значениями при отображении значения во входном элементе управления.
вот что я сделал в своем методе действий, чтобы исправить проблему:
ModelState.Remove("Page");
return View(search);
Мне интересно услышать другие способы решения моей проблемы.
измените выбранное значение с помощью javascript одним нажатием кнопки next или previous, прямо перед вашей обратной передачей.
- вы уверены, что вам гарантировано, что хотя бы один из
NextPage
илиPrevPage
будет null? (И вы не получите ничего странного, какString.Empty
форсирование приращения и уменьшения?) - мог бы
.LastOrDefault()
заменить на just.Last()
и вы уверены, что вы не назначаяdefault(int)
tosearch.Page
?
тут ниже есть ли эффект?
ViewData["pages"] = new SelectList(pages,
pages.FirstOrDefault(p => p == search.Page ));
замена
ViewData["pages"] = new SelectList(pages, search.Page);