5

Ajax 呼び出しで MVC Web サイトを作成しようとしています。jquery を直接使用しても問題ありませんが、@Ajax.ActionLink を使用すると、必要な結果が得られません。これが私の見解です:

    <script type="text/javascript">
        function deleteComment(id) {
            $.post(
                "/Role/AjaxTest",
                //{ id: id }, 

                function (data) {
                    $("#testtarget").html(data);               
                });
         }
    </script>


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <h2>TITLE</h2>
    <p>
 @Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p>
    <table>    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.RoleName)
            </td>
            <td>
              <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a>
                @Html.ActionLink("Delete", "Delete", new { id=item.RoleId })

            </td>
        </tr>
    }
    </table>
    <div id="testtarget">Test Div</div>

ここに私のコントローラーデータがあります:

public string AjaxTest()
{
    return "Some random text";
}

Jquery の呼び出しは完全に機能し、テキストは div に表示されますが、actionlink は localhost/Role/AjaxTest にリダイレクトするだけなので、銀行のブラウザーにメッセージが表示されます。

ここで何が問題なのですか?

よろしくお願いします!

4

2 に答える 2

9

jquery.unobtrusive-ajax.jsページにスクリプトを追加したことを確認します。

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script>

または、バンドルを使用している場合 (これが推奨される方法です)、このスクリプトを含むバンドルが含まれていることを確認してください。たとえば、~/bundles/jqueryvalバンドルとなる Internet Template を使用して新しい ASP.NET MVC 4 プロジェクトを作成する場合:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*",
    "~/Scripts/jquery.validate*")
);

したがって、jquery バンドルの後にビューに含まれていることを確認してください。

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

または、それらを 1 つのバンドルに組み合わせるだけです。それはすべて、要件と、目立たない jquery 検証サポートが必要かどうかによって異なります。

また、コントローラー アクションが文字列ではなく ActionResult を返すようにすることをお勧めします。

public ActionResult AjaxTest()
{
    return Content("Some random text");
}
于 2012-10-12T14:39:43.480 に答える
2

ブラウザでF12を使用して、コンソールでスクリプトエラーが発生するかどうかを確認してください。Fiddlerは、ライブラリのいずれかが正しく参照またはロードされていないかどうかを識別するのにも役立ちます。

于 2012-10-12T22:20:41.970 に答える