1

クリックすると、別のリンクを開くのではなく、ページ全体が更新されることなく同じページで開くハイパーリンクが必要でした。私のコントローラーには次の機能があります

public ActionResult PrivacyPolicy()
{
    if (Request.IsAjaxRequest())
    {
       return PartialView();
    }
       return View();
}

プログラムを実行してブレークポイントを挿入すると、プログラムが常に代わりにreturn view();戻ることに気付きますview()PartialView();

ここにindex.cshtmlコードがあります

@section head{

    <script type="text/javascript"
            src="@Url.Content("~/scripts/AjaxDemo.js")"></script>
}
@Html.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"})

<div id="privacy"></div>

部分ビューの PrivacyPolicy には、テキストがほとんどありません。

そしてAjaxDemo.js見た目はこんな感じ

$(document).ready(function () {
    $('#privacyLink').click(function (event) {
        event.preventDefault();
        var url = $(this).attr('href');
        $('#privacy').load(url);
    });
});

プログラムが部分ビューを返さないのはなぜですか? または、なぜajaxリクエストを受け取らないのですか? ブラウザの JavaScript が有効になっている場合、プログラムは同じインデックス ページ (CustomAjax) でリンクを開くべきではありませんか?

4

2 に答える 2

2

jQuery ロードを実行すると、実際には通常のリクエストが実行され、指定された要素内に結果データがロードされます。

カスタム JavaScript コードを削除し、組み込みの ajax ヘルパーを使用して、AjaxOptions で updateTargetID を指定する必要があります。

    @Ajax.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"}, new AjaxOptions {UpdateTargetId = "privacy"})

    <div id="privacy"></div>

編集: IsAjaxRequest() に関するいくつかの詳細情報を追加:

Ajax リクエストを作成するときは、X-Requested-WithHTTP ヘッダーをXMLHttpRequest'. Internally,IsAjaxRequest` に設定して、このヘッダーの存在を確認する必要があります。

jQuery.Ajaxそのためにデフォルトの Ajax ヘルパーを使用すると、このヘッダーが含まれます。jQuery.load()このヘッダーを使用する場合は含まれません。jQuery.load では、カスタム ヘッダーを設定できません。

編集 Ajax.ActionLink を使用するには、目立たない ajax ライブラリを含めて、web.config で有効にする必要があります。

<configuration>
    <appSettings>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

フラグを設定するだけでなく、控えめな Ajax with jQuery 用の MVC プラグインも含める必要があります ( ~/Scripts/jquery.unobtrusive-ajax.js)。

于 2013-05-15T10:23:09.313 に答える
0

IIRCeventは予約語です。このようにしてみてください:

$('#privacyLink').click(function (e) {
    e.preventDefault();
    var url = $(this).attr('href');
    $('#privacy').load(url);
});

また:

$('#privacyLink').click(function () {
    var url = $(this).attr('href');
    $('#privacy').load(url);
    return false;
});

また、スクリプトのに jQuery.js を含めることを忘れないでくださいAjaxDemo.js

于 2013-05-15T12:10:41.483 に答える