我在MVC中有一个DropDownList,它获取一个由控制器初始化和填充的SelectList。该列表所在的特定页面的目标是立即向用户回复“您已选择了选项X”,而无需刷新(使用Ajax)。
我遇到的问题是,出于某种奇怪的原因,虽然dropdown可以正确呈现,甚至可以正确返回,但添加新选项或修改以前的响应消息的任何尝试都是徒劳的。
我的观点:
<script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script>
<script type="text/javascript" src="../../Scripts/MicrosoftMvcAjax.js"></script>
<h2>Configuration</h2>
<% Using (Ajax.BeginForm("HandleConfigForm", New AjaxOptions With {.UpdateTargetId = "ConfigResults"}))%>
Select the config file you wish to view: <%= Html.DropDownList("cprotocols")%>
<br /><br />
<input type="submit" value="Submit" />
<br />
<br />
<span id="ConfigResults"></span>
<% End Using%> 我的控制器:
Function Configuration() As ActionResult
Dim configList As List(Of String) = New List(Of String)
configList.Add("A")
configList.Add("B")
configList.Add("C")
configList.Add("D")
configList.Add("test")
ViewData("cprotocols") = New SelectList(configList)
Return View()
End Function
Function HandleConfigForm(ByVal cprotocols As String) As String
Select Case cprotocols
Case "A"
Return "You picked: dat option"
Case "B"
Return "You picked: dat option B"
Case "C"
Return "You picked: wat even is C"
Case "D"
Return "You picked: choice D"
Case "test"
Return "cache"
End Select
Return [String].Empty
End Function以前我的代码没有"test" (既不是在Configuration()中,也不是在HandleConfigForm())中;另外,在Case "A“中,注释通常是"dat option A"。
当我加载我的站点时,下拉列表显示从A到D的选项,但没有测试...选择一个字母会给出适当的消息,除了A回发"dat option A"而不是新的"dat option"。
我完全不知道发生了什么,除了不知何故,我的功能已经崩溃,浏览器正在缓存之前由Javascript加载的数据。除了简单地添加到configList和更改Select开关中的返回值之外,我没有对代码进行任何其他更改,所以我看不出有什么地方会出错。
有什么想法吗?
发布于 2011-09-20 23:34:23
浏览器将缓存ajax调用的结果,就像缓存任何其他请求的结果一样。
一种解决方案是将一个显式的OutputCache指令添加到您的方法中,并将持续时间设置为0。
jQuery使用的方法是将随机的查询字符串参数附加到url。
我从来没有用过MicrosoftAjax的东西,所以我不完全确定它是如何工作的。
https://stackoverflow.com/questions/7487716
复制相似问题