2009-04-16 3 views
0

У меня есть простая страница поиска по моему указателю с раскрывающимся списком и текстовым полем. Я хотел бы помнить о предпочтении пользователя для раскрывающегося списка, поэтому я сохраняю его в таблице и извлекаю его по мере необходимости. Вот функция контроллера:Непонятное поведение приложения ASP.NET MVC

Function Index(ByVal lob As String, ByVal filter As String) As ActionResult 
    If If(lob, "") = "" Then 
     lob = GetUserPreferenceLob() 
    End If 
    ViewData("lob") = New SelectList(GetLobValues(), "Value", "Text", lob) 
    ViewData("message") = lob 
    Return View() 
End Function 

The View выглядит следующим образом:

<% Using Html.BeginForm()%> 
Line of Business: 
<%=Html.DropDownList("lob", Nothing, New With {.onchange = "document.forms[0].submit()"})%> 
Search: 
<%=Html.TextBox("filter")%> 
<img src="..." alt="Search" onclick="document.forms[0].submit()" /> 
<%=ViewData("message")%> 
<% End Using%> 

Когда я начинаю приложение (это страница по умолчанию), она успешно загружает список и выбирает пункт пользователя. Однако, если перейти на страницу, например, по ссылке в другом месте на странице, она загружает список, но по умолчанию выбирает первый элемент. Я запустил отладчик, и он всегда выполняет функцию индекса, и в соответствии с выходом «message» он всегда передает правильное значение, которое нужно выбрать, поэтому почему этот сценарий не выбирает правильную запись в списке?

Обновление: У меня есть другие данные о форме, которая зависит от выбранного значения в раскрывающемся списке. При переходе на страницу по ссылке остальная страница ведет себя так, как если бы был выбран соответствующий элемент, но выпадающее меню по умолчанию - вверху. Другими словами, если мое раскрывающееся меню имеет значения «A», «B» и «C», и я выбираю «C», а затем нажмите ссылку, которая перезагружает страницу, в раскрывающемся списке отображается «A», но остальная часть на странице есть данные для «C».

+0

Вы проверили, чтобы несколько элементов не были выбраны как выбрано? (как в вашем представлении ViewData ["lob"], так и в фактическом источнике html) –

+0

Возможно, я что-то пропустил, но как данные могут упасть в ваших фрагментах кода. «Nothing» в «... DropDownList (« lob », Nothing ...», если это не DropDownList («lob», lob ... », где lob является общедоступным или защищенным свойством в коде. –

+0

@James Avery - Когда он работает правильно, соответствующий элемент выбрал = «выбрано» в разметке. Когда я перемещаюсь по ссылке, ни один из элементов не выбран в разметке, поэтому он по умолчанию находится в верхней части списка – gfrizzle

ответ

2

Вы пытались обновить страницу после ссылки на страницу. Это может быть локально кэшированная версия.

+0

Он не имеет никакого отношения к кешированию. Страница никогда не отображается с первым элементом в выбранном списке - почему это была бы кешированная версия? Я также попытался добавить весь код истечения срока действия кеша из другого потока SO, и он ничего не изменил. – gfrizzle

+0

Просто проверяйте более очевидные возможности. –

0

Возможно кэширование ...

Проверить эту нить связанный here (Stack Overflow)

+0

Я попытался реализовать код истечения срока действия кэша, но ничего не изменил. Кажется, он не связан с кешем. – gfrizzle

0

У меня есть очень похожий вопрос с TextBoxes:

На моей странице, я сделать текстовое поле с Html.TextBox ("Атрибут", Model.Attribute). Пользователь вводит значение в это текстовое поле, затем нажимает кнопку. В коде, который выполняется, я вычисляю новое значение для атрибута модели, а затем снова показываю представление. Html.TextBox («Attribute», Model.Attribute) по-прежнему отображает введенное пользователем значение, тогда как Html.Encode (Model.Attribute) показывает правильное значение из Модели.

Кажется, что Html.TextBox предпочитает отображать введенное пользователем значение, а не модифицированное программистом значение из модели. Поэтому вместо отображения значения его второго входного параметра, Html.TextBox, похоже, отображает ViewData.ModelState ["Atrribute"]. Value.RawValue.

Поэтому я просто изменяю состояние представления и модель в обратном направлении.

Смежные вопросы