J'ai une page de recherche simple sur mon avis d'index avec un menu déroulant et une zone de texte. Je voudrais me souvenir de la préférence de l'utilisateur pour la liste déroulante, donc je stocke cela dans une table et le récupère au besoin. Voici la fonction de contrôleur:comportement Puzzling d'application 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
La vue ressemble à ceci:
<% 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%>
Quand je commence l'application (ce qui est la page par défaut), il charge avec succès la liste et sélectionne l'élément de l'utilisateur. Si je navigue sur la page cependant, comme via un lien ailleurs sur la page, il charge la liste mais sélectionne le premier élément par défaut. J'ai exécuté le débogueur et il passe toujours par la fonction Index, et selon la sortie "message" il passe toujours la bonne valeur à sélectionner, alors pourquoi ce scénario ne sélectionne pas la bonne entrée dans la liste?
Mise à jour: J'ai d'autres données sur le formulaire qui dépend de la valeur sélectionnée dans la liste déroulante. Lorsque vous naviguez vers la page via un lien, le reste de la page se comporte comme si l'élément approprié était sélectionné, mais la liste déroulante par défaut est en haut. En d'autres termes, si ma liste déroulante a les valeurs "A", "B" et "C", et je sélectionne "C", puis cliquez sur un lien qui recharge la page, la liste déroulante affiche "A", mais le reste de la page contient les données pour "C".
Avez-vous vérifié pour vous assurer que plusieurs éléments ne sont pas définis comme sélectionnés? (à la fois dans votre ViewData ["lob"] et dans la source html réelle) –
Peut-être que je manque quelque chose, mais comment les données sont-elles liées dans vos fragments de code? Le "Nothing" dans "... DropDownList (" lob ", Nothing ...", ne devrait-il pas être DropDownList ("lob", lob ... "où lob est une propriété publique ou protégée dans le code-behind –
@James Avery - Quand il fonctionne correctement, l'élément approprié a sélectionné = "sélectionné" dans le balisage Lorsque je navigue via le lien, aucun des éléments n'est sélectionné dans le balisage, c'est pourquoi il est par défaut en haut de la liste . – gfrizzle