Я много читал об этой проблеме, но не могу понять.
У меня есть выпадающий список, который используется для подкачки страниц. Вы выбираете страницу, на которую хотите перейти, и форма отправляется. Когда представление возвращается, запрашиваемая страница отображается. Раскрывающийся список изменяется, чтобы отразить вновь показанную страницу. Это работает нормально.
Моя проблема заключается в следующем:
У меня есть 2 кнопки отправки, одна для следующей страницы и одна для предыдущей страницы.
В контроллере, если нажата одна из отправок, страница должна быть увеличена или уменьшена на 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" />
Пожалуйста, помогите.
EDIT
Страница 333 из Pro ASP.NET MVC Framework Стивена Сандерсона :
Как элементы управления вводят свои значения
Каждый из [помощников HTML для рендеринга элементов управления вводом] пытается
заселить себя, ища ценность
в следующих местах, в этом порядке
приоритет:
- ViewData.ModelState [ "CONTROLNAME"]. Value.RawValue
- параметр значения передается вспомогательному методу HTML, или если вы вызвали
перегрузка, не включающая значение
параметр, то
ViewData.Eval ( "CONTROLNAME")
ModelState - область временного хранения
что ASP.NET MVC использует для сохранения
входящие предпринятые значения плюс привязка
и ошибки проверки. Заметить, что
это в верхней части списка приоритетов,
поэтому его значения переопределяют все, что вы
может установить явно. Эта конвенция
означает, что вы можете передать явное
параметр значения, чтобы действовать как помощник
значение по умолчанию или начальное значение; но когда
переотображение представления после
ошибка проверки, помощник
сохранить любое введенное пользователем значение в
предпочтение этому умолчанию.
Я подтвердил, что ViewData.ModelState ["Page"]. Value.RawValue содержит неожиданный номер страницы, который приставает ко мне. Какой лучший способ обойти это?