どこにもこの種の詳細を見つけることができないように見えるので、いくつかの奇妙な動作があります...
セットアップ: ASP.NET MVC 4 と VS 2010 を使用して、検索ページと、検索の選択に基づいて企業ツリーを表示する詳細ページを備えた企業ディレクトリ アプリケーションを作成しました。
検索ページは非常に基本的なもので、ajax.beginform を使用すると、選択した条件に基づいてユーザーのリストが返されます。人をクリックすると、その人、上司、部下を示す「ツリー」が表示されます。
問題 ユーザーが誰かを検索し、その結果をクリックすると、ツリーが表示されます。戻るボタンをクリックすると (ツリー ビューで他のアクションを実行するかどうかに関係なく)、検索画面に戻ります。彼らが入力した基準はそこにありますが、結果はありません (私が期待するように)。検索をクリックするか、Enter キーを押すと、ユーザーは 404 ページが見つからないというエラーを受け取ります...
私が試し たこと 私が読んだことから、私はキャッシュを中心に展開する可能な解決策に焦点を当ててきました.ページを期限切れにするか、ページをキャッシュなしに設定しようとしましたが、それは問題を解決していないようです. .
コード
検索ビュー:
@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。探しているリソース (またはその依存関係の 1 つ) は、削除されたか、名前が変更されたか、一時的に利用できない可能性があります。次の URL を見直して、スペルが正しいことを確認してください。
要求された URL: /
-------------------------------------------------- ------------------------------ バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272
編集: これは IE 9 (すべてのモード) に固有のようです。この動作は Chrome では発生せず、検索フォームは戻るボタンを使用した後に完全に再送信されます...