Загадочное поведение приложения ASP.NET MVC - PullRequest
0 голосов
/ 16 апреля 2009

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

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

Вид выглядит так:

<% 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%>

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

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

Ответы [ 3 ]

2 голосов
/ 16 апреля 2009

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

0 голосов
/ 15 октября 2009

У меня очень похожая проблема с TextBoxes:

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

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

Так что я просто меняю состояние просмотра и модель в обе стороны.

0 голосов
/ 16 апреля 2009

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

Проверьте эту тему здесь (переполнение стека)

...