2011-11-17 48 views
1

我有一个asp.net mvc3站点,在单击后退按钮时显示一些奇怪的行为。我有一个文本输入的表单,该值设置为一个属性上我的模型,像这样:使用浏览器后退按钮后显示错误值的文本输入

@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { name = "searchForm" })) 
{ 
    <div> 
     <input id="term" type="text" name="Term" value='@Model.Term' /> 
     <input type="submit" value="Search" /> 
    </div> 
} 

一切的伟大工程,在浏览器中使用后退按钮时除外。如果我输入“ABC”,然后提交我的表单,输入“XYZ”并再次提交,然后返回我仍然在文本字段中看到“XYZ”,但是当我使用浏览器开发人员工具检查HTML时,它显示正确的值的“ABC”(正确的值也在查询字符串中)。

我在页面上还放置了另一个地方,我放弃了@ Model.Term的相同值,但是在那个地方它正确地显示为“ABC”。

任何想法?我觉得它必须是我做的一些愚蠢的事情,但我无法弄清楚它:)

回答

0

浏览器很可能会显示它最后看到的作为表单输入的内容,而不是HTML包含的内容。它不知道显示文本的两个地方之间的关系,它只知道用户在其中一个类型中键入了'Bob'(所以它显示了它)。

一个选项可能是在表单提交完成后保存一个cookie(服务器端)。然后使用显示here的技术在点击后退时触发一些javascript。在该javascript中,检测cookie是否存在,以及是否强制整个页面刷新(相当于单击F5)。注意我并不是说这是一个好主意(我认为它是一个可怕的想法),但它可以做你期望的事情(而不是你的用户的期望 - 这是现在发生的事情)。

另一个(更好的)选项是确保every POST does a redirect straight after to a GET。通过这种方式,当您执行Back操作时,可以返回到GET的结果(这可能会与您的期望保持一致)。


+0

表单使用Get而不是Post来提交,这仍然适用吗? –

+0

这个想法基本上是一样的,是的。重新定向,然后离开你。 – mjwills

+0

您使用GET表单而不是POST表单的任何特定原因? – mjwills