2009-04-16 26 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 

观是这样的:

<% 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函数,并根据“消息”输出它总是传递正确的值被选中,那么为什么该方案没有在列表中选择正确的条目?

更新:我已经得到了表单上的其他数据,这取决于下拉菜单中选定的值。当通过链接导航到页面时,页面的其余部分表现得就像选择了适当的项目,但下拉列表默认为顶部。换句话说,如果我的下拉列表中有值“A”,“B”和“C”,并选择“C”,然后点击一个链接重新载入页面,下拉菜单显示“A”,但剩下的该页面具有“C”的数据。

+0

您是否检查确定多个项目未被设置为选中状态? (都在你的ViewData [“lob”]和实际的html源文件中) – 2009-04-16 19:54:30

+0

也许我错过了一些东西,但是数据绑定到你的代码片段中会下降到什么程度。 “DropDownList(”lob“,Nothing ...”)中的“Nothing”不应该是DropDownList(“lob”,lob ......),其中lob是代码隐藏中的公共或受保护的属性。 – 2009-04-17 02:14:58

+0

@James Avery - 当它正常工作时,相应的项目在标记中选择=“selected”。当我通过链接导航时,标记中没有选择任何项目,这就是为什么它默认选择列表顶部 – gfrizzle 2009-04-17 13:01:14

回答

2

您是否在尝试刷新页面后访问该页面的链接。它可以是本地缓存版本。

0

大概缓存...

退房此相关的线程here(堆栈溢出)

0

我有一个文本框一个非常类似的问题:

在我的网页,我呈现与文本框Html.TextBox(“属性”,Model.Attribute)。用户在此文本框中输入一个值,然后按下一个按钮。在执行的代码中,我计算模型属性的新值,然后再次渲染视图。 Html.TextBox(“属性”,Model.Attribute)仍显示用户输入的值,而Html.Encode(Model.Attribute)显示模型中的正确值。

看起来Html.TextBox更喜欢显示用户输入的值而不是模型中的程序员修改的值。因此,而不是显示其第二个输入参数的值,Html.TextBox似乎显示ViewData.ModelState [“Atrribute”]。Value.RawValue。

所以我只是在往返中改变视图状态和模型。