我有一个asp.net mvc3网站,在点击后退按钮时会显示一些奇怪的行为。我有一个带有文本输入的表单,该值设置为我的Model上的属性,如下所示:
@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 :(得分:0)
浏览器可能会显示它最后看到的作为表单输入的内容,而不是HTML包含的内容。它不知道显示文本的两个地方之间的关系,它只知道用户在其中一个中键入“Bob”(因此它显示了它)。
一个选项可能是在表单提交完成后保存cookie(服务器端)。然后使用显示here的技术在单击后退时触发一些javascript。在该javascript中,检测cookie是否存在以及是否强制刷新整页(相当于单击F5)。
注意我并不是说这是一个好主意(我认为这是一个可怕的想法),但它可能会做你期望的事情(而不是你的用户所期望的 - 现在正在发生的事情)。
另一个(更好)选项是确保every POST does a redirect straight after to a GET。这样当你进行后退点击它会回到GET的结果(这可能与你的期望一致)。