有一些奇怪的行为,我希望得到一些反馈,因为我似乎无法在任何地方找到关于这类事情的任何细节......
设置: 使用 ASP.NET MVC 4 和 VS 2010,我创建了一个带有搜索页面和详细信息页面的公司目录应用程序,该页面根据搜索选择显示公司树。
搜索页面非常基本,使用 ajax.beginform 它会根据所选条件返回一个人员列表。单击此人后,您会得到一个“树”,显示该人、他们的主管和任何下属。
问题 用户搜索某人,点击他们的结果,看到树。当他们单击后退按钮(在树视图上执行或不执行任何其他操作)时,他们将返回到搜索屏幕。他们输入的标准在那里,但结果却不是(如我所料)。如果他们点击搜索或按回车键,用户会收到 404 page not found 错误...
我尝试过 的内容从我读过的内容来看,我一直专注于围绕缓存的可能解决方案,我尝试过使页面过期或将页面设置为无缓存,但这似乎并没有解决问题.
代码
搜索视图:
@using (Ajax.BeginForm("PersonList", "Home", new AjaxOptions { UpdateTargetId = "results", InsertionMode=InsertionMode.Replace }))
{
@Html.LabelFor(model => model.LastName)
@Html.TextBoxFor(model => model.LastName)<br />
@Html.LabelFor(model => model.FirstName)
@Html.TextBoxFor(model => model.FirstName)<br />
<input type="submit" value="Search" />
<div id="results">
</div>
}
用于搜索结果的块。这是一个部分视图,也可用于树视图。这就是为什么您会看到块顶部的链接处于条件状态。如果要从搜索页面使用链接,则它是一个强制更改整个页面的 html 链接。但是,如果您已经在树视图上,则导航是通过 ajax 完成的。我收到的 404 错误发生在树视图页面上根本没有导航:
<div id="p@{ Html.DisplayFor(model => model.Id); }" class="personCard">
<img class="personImg" id="img@{ Html.DisplayFor(model => model.Id); }" src="@Url.Content("~/Photos")/@Html.DisplayFor(model => model.Id)" />
<div>
@if(ViewBag.IsForSearch == null) {
@Ajax.ActionLink(this.Model.FullName, "PersonHierarchy", new { id = this.Model.Id }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "tree" })
} else {
@Html.ActionLink(this.Model.FullName, "Person", new { id = this.Model.Id })
}
@if(this.Model.TeamSize > 0) {
@: (
@Html.DisplayFor(model => model.TeamSize)
@:)
}
<br />
@Html.DisplayFor(model => model.Title)<br />
@Html.DisplayFor(model => model.MailLocationCode), @Html.DisplayFor(model => model.WorkNumber) @Html.DisplayFor(model => model.ExtensionForDisplay)<br />
@if (this.Model.CellNumber.Trim() != string.Empty)
{
@:Cell:
@Html.DisplayFor(model => model.CellNumber)
@:<br />
}
@Html.DisplayFor(model => model.EmailAddress)
</div>
</div>
来自服务器的响应:
“/”应用程序中的服务器错误。
无法找到该资源。说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。
请求的网址:/
-------------------------------------------------- ------------------ 版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.272
编辑: 这似乎特定于 IE 9(在所有模式下)。这种行为在 Chrome 中不会发生,并且搜索表单在使用后退按钮后会完美地重新提交......