2011-09-20 38 views
1

缓存我在MVC DropDownList中其劫掠的SelectList初始化,并通过控制器填充。所述列表所在的特定页面的目标是立即向用户回复“您已选择选项X”,而无需刷新(使用Ajax)。的SelectList通过AJAX

我遇到的问题是,一些奇怪的原因,而下拉正确呈现正确,甚至会回,任何企图增加新的选项或修改以前的响应消息都是徒劳的。

笔者认为:

<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());此外,如果 “A” 使用的评论说"dat option A"

当我打开我的网站,在下拉列表显示选项A到d,但没有测试......选择快报呃给出适当的信息,除了A帖子回复"dat option A"而不是新的"dat option"

我完全不知道发生了什么其他的则是通过加载的Javascript,不知怎的,我的功能已经打破,而浏览器缓存以前的数据。除了简单地添加到configList并更改Select开关中的返回信息外,我没有对代码做任何其他更改,所以我没有看到会出现什么问题。

任何想法?

回答

0

浏览器会缓存Ajax调用的结果,就像它会缓存任何其他请求的结果。

一种解决方案是一个明确的OutputCache指令添加到您的方法与持续时间设置为0

jQuery使用是随机的查询字符串PARAM追加到URL的方法。

我从来没有使用MicrosoftAjax的东西,所以我不能完全确定它是如何工作的。