私はしばらくの間この問題をグーグル/ SO:していて、多くの人がこれを共有しているようですが、私の問題に対する成功した解決策は見つかりませんでした。
MVC3とRazorを使用します。
マスターページに含まれるもの:
<script src="@Url.Content("~/Scripts/jquery-1.5.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
AjaxTest.cshtmlに含まれるもの:
_<div id="AjaxTestDiv">content</div>
_
@Ajax.ActionLink("Update", "AjaxTester", new AjaxOptions { UpdateTargetId = "AjaxTestDiv" })
AjaxTesterアクションメソッド:
_public string AjaxTester()
{
if (Request.IsAjaxRequest())
{
return DateTime.Now.ToString();
}
else
{
return "FAIL";
}
}
_
対象のdivではなく、常に「FAIL」が空白のページに返されます。
編集:if(Request.IsAjaxRequest())を削除しても、ターゲットのdivには何も戻らず、代わりに空白のページが返されることにも注意してください。
Edit2:生成されたHTMLを見ると、これは私のリンクです:
_<a data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace"
data-ajax-update="#AjaxTestDiv" href="/Area/AjaxTester">Update</a>
_
メソッドをGETに切り替えてみましたが、役に立ちませんでした。
デフォルトでは、ASP.NET MVC3はすべてのAjax.*
ヘルパーで目立たないjqueryを使用します。したがって、すべてのMicrosoftAjaxスクリプト(この役に立たないc ** p)を取り除くことから始めて、代わりに次のように配置します。
<script src="@Url.Content("~/Scripts/jquery-1.5.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
次に、web.configで控えめなAJAXをアクティブにします(まだ実行されていない場合):
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
これで、jqueryは、これらのHTML 5 data-*
属性を含むすべてのリンクを目立たないようにAJAX化します。
またはさらに良い私見:
あなたの見解では、単に:
@Html.ActionLink("Update", "AjaxTester", new { id = "mylink" })
別のjavascriptファイルでこのアンカーをAJAXifyします。
$(function() {
$('#mylink').click(function() {
$('#AjaxTestDiv').load(this.href);
return false;
});
});
ActionLinkが正しく機能しない可能性のある別のIE固有の問題については、ここで説明します。 ASP.NET MVC-Ajax.ActionLinksでのキャッシュの防止
基本的に、IEはAjaxGETリクエストをキャッシュすることがあるため、AjaxOptionのHttpMethodをPOSTに設定することは、ActionLinkを構築するための脆弱性の少ない方法です。
@Ajax.ActionLink(
item.Name + " (Ajax link test)",
"MyActionName",
routeValues: new { id = item.Id },
ajaxOptions: new AjaxOptions()
{
UpdateTargetId = "divToUpdate",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
まだこの問題に直面している人のために:
プロジェクトのどこかに以下のファイルがあるはずです。
そうでない場合は、以下がnugetパッケージです。これは、VisualStudioプロジェクトのnugetmanagerまたはパッケージマネージャーコンソールからダウンロードしてください。 https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Validation/3.2 .11 /
それぞれのビューまたはレイアウトファイルで、jquery.min.jsの最新バージョンの後に上記で追加したファイルの参照を指定します。