0

ajax リクエストを呼び出す html 要素の ID を取得したいだけなので、このデータをコントローラー関数で使用できます。

これはビューです:

   @model CmsSite.Models.SideBarData

@{
    ViewBag.Title = "Home Page";
}
@section featured {
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>@ViewBag.Title.</h1>
                <h2>@ViewBag.Message</h2>
            </hgroup>
        </div>
    </section>
}
<h3>We suggest the following:</h3>

<aside id="sidebar">
 @using (Html.BeginForm("ShowContent", "SideBar"))
 {  
         <input id="side_bar_manage_categoty" name="side_bar_manage_categoty" class="post-transaction" type="submit" value="Manage Categorys" />
         <input name="side_bar_manage_products" class="post-transaction" type="submit" value="Manage Products" />
         <input name="side_bar_manage_users" class="post-transaction" type="submit" value="Manage Users" />
         <input name="side_bar_Watch_sales" class="post-transaction" type="submit" value="Watch Sales" />
         <input name="side_bar_change_site_appearance" class="post-transaction" type="submit" value="Change Site Appearance" />
 }
        </aside>  
<div ><p class="content"></p></div>

  <script id="ajax-request-result" type="application/html-template">             
        <div class="content">{{request_result}}</div>
     </script>

@section Scripts {
    <script type="text/javascript">
        $(function () {
            $('.post-transaction').on("click", function () {

                var form = $(this).parent("form");

                $.ajax({
                    type: "POST",
                    url: form.attr('action'),
                    data: form.serialize()
                })
                    .success(function (data) {
                        var template = $("#ajax-request-result").clone().html();

                        var html =
                            template
                                    .replace("{{request_result}}", data.request_result);
                       $(".content").replaceWith(html);

                    })
                    .error(function () {
                        alert("Your bid has been rejected");
                    });

                return false;
            });
        });
    </script>
}

これは、ajax リクエストを取得するメソッドを持つコントローラーです。

[HttpPost]
        public ActionResult ShowContent(string side_bar_manage_categoty)
        {

            string a = side_bar_manage_categoty;
            return Json(new
            {
                request_result = "Transaction Failed!"
            });
        }

ここに画像の説明を入力

4

1 に答える 1

0

フォーム要素にはname属性が必要です。したがって、次のようなことを行う場合:

<input id="side_bar_manage_categoty" name="side_bar_manage_categoty" class="post-transaction" type="submit" value="Manage Categorys" />
<input id="side_bar_manage_products" name="side_bar_manage_products" class="post-transaction" type="submit" value="Manage Products" />

次に、それらの名前(idこの場合は属性からコピーしたばかり)がFormCollectionサーバー上のに値を伝達します。したがって、アクションが次のようになっている場合:

public ActionResult ShowContent(FormCollection collection)

次にcollection、actionメソッド内のオブジェクトを調べて、ページ上の特定のボタンのキー/値があるかどうかを確認できます。さらに一歩進んで、MVCのフォームバインディングを使用して、強く型付けされたアクションメソッド引数を作成することもできます。

public ActionResult ShowContent(string side_bar_manage_categoty, string side_bar_manage_products)

この場合、ボタンをクリックするside_bar_manage_productsstring、値が含まれ"Manage Categorys"(これはのvalue属性であるためinput)、他の文字列はになりますnull。他のボタンをクリックすると、その逆になります。したがって、null以外の文字列をテストするだけで(これstring.IsNullOrWhiteSpace()をテストするのに適した方法です)、それが呼び出されるボタンになります。

于 2013-03-01T13:03:42.687 に答える