0

基本的なMVCアプリを作成しました。

ホームビューの場合、Create.cshtmlページを次のように作成しました。

<h2>title Create</h2>

ホームコントローラーにgetメソッドを追加しました。

public ActionResult Create(int id)
        {
            return View();
        }

私のIndex.cshtmlビューには、次のものがあります。

@{
    ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
        http://asp.net/mvc</a>.
</p>
<div class="clicky">click me</div>
<script type="text/javascript">
    $(function () {
        $(".clicky").click(function () {
            $.get('@Url.Action("Create")', { id: "1" }, function () {

            });
        });
    });
</script>

それを実行したときの驚きを想像してみてください。クリックしても画面が変わらないことがわかりました。

Createにブレークポイントを設定すると、メソッドが実際に入力されていることがわかりました。また、firebugはエラーの兆候を示していませんでした。

次に、スクリプトを次のように変更しました。

<script type="text/javascript">
        $(function () {
            $(".clicky").click(function () {
                //$.get('@Url.Action("Create")', { id: "1" }, function () {

                //});

                window.location.href = '/Home/Create/1';
            });
        });
    </script>

これで、アプリは期待どおりに機能し、作成ビューが返されました。

以前の方法がうまくいかなかった理由を誰かに説明してもらえますか?

4

1 に答える 1

3

前者の方法では、非同期リクエストがサーバーに送信されます。返されたデータ(この場合はレンダリングされた作成ビュー)は、サンプルでは空のjavascriptコールバックメソッドに戻されます。

$.get('@Url.Action("Create")', { id: "1" }, function (data, textStatus, jqXHR) {

});

コールバック関数にパラメーターを追加して、関数にjavascriptブレークポイントを設定してみてください。htmlがdataパラメータで渡されていることがわかります。これを使用して、いくつかのdivまたは次のようなダイアログでレンダリングできます。

function (data, textStatus, jqXHR) {
    // simply put it in a div
    $("#mydiv").html(data);
    // or open a jquery dialog
    $("#mydiv").html(data).dialog();
});

Ajaxまたは、次のようなヘルパーの1つを使用できますAjax.ActionLink

于 2012-09-07T09:20:36.183 に答える