2

コントローラーにパラメーターを送信したい.これは私のビューページです:

<div>
  <li> <input name="chk" type="checkbox" value="1"> electronics </li>
  <li> <input name="chk" type="checkbox" value="2"> Construction</li>
  <li> <input name="chk" type="checkbox" value="1"> Hardware</li>
    <div class="row service-block" id="results">
      @Html.Partial("_searchPartial", Model)
    </div>
</div>


 $("input[type='checkbox']").on('change', function () {
            var checkboxes = document.getElementsByName('chk');
            var vals = "";
            for (var i = 0, n = checkboxes.length; i < n; i++) {
                if (checkboxes[i].checked) {
                    vals += "," + checkboxes[i].value;
                }
            }
            if (vals) vals = vals.substring(1);
            $.ajax({
                url: "/Search/SearchWorkers",
                type: "GET",
                dataType: 'html',
                data: { checkCategoriesId: vals,"City": "@ViewBag.City", "OrderBy": "@TempData["OrderBy"]" },
                contentType: "text/html;charset=utf-8",
                success: function (responce)
                {
                    $("#results").html(responce);
                },
                error:function (xhr, ajaxOptions, thrownError)
                {
                    alert("test");
                }
            })
        });

これは私のコントローラーです。まず、orderby 値を保持しているこのメソッドを呼び出しています。

[HttpGet]
        public ActionResult SearchPaging(string ItemSearchText,string City, string OrderBy, int PageNo, string Zipcode, string Flag,string checkCategoriesId)
        {
            TempData["OrderBy"] = OrderBy;
            return PartialView("_searchPartial", userDetailsModel.OrderBy(v => v.Fullname).ToPagedList(PageNo, 1));
    }




[HttpGet]
public ActionResult SearchWorkers(string checkCategoriesId,string OrderBy,string Flag,string City, int PageNo = 1)
{ 
 TempData["OrderBy"] = OrderBy
  return PartialView("_searchPartial", userDetailsModel.OrderByDescending(p => p.CreatedDate).ToPagedList(PageNo, 1));
}

tempdata の値を確認しましたが、ビュー ページに値が表示されています。

しかし、チェックボックスの変更イベントを発生させ、tempdata 値を渡すと、null 値が取得されます。

何が問題なのかわからない

誰でも理解できますか?

4

1 に答える 1

1

あなたはあなたの答えを見つけたかもしれませんが、同じ質問をしている他の人のために私は私の答えを追加しています.

Stephen Muecke が示唆したように、非表示の値を使用して、チェックボックスの変更イベントに基づいて値を更新できます。

チェックボックスの現在の値を取得してコントローラーに渡すこともできます。必要なのはこの1行だけです

OrderBy: $(this).attr("value");

コードは次のとおりです。

$("input[type='checkbox']").on('change', function ()
{
 $.ajax({
                url: "/Search/SearchWorkers",
                type: "GET",
                dataType: 'html',
                data: { checkCategoriesId: vals,"City": "@ViewBag.City",                   "OrderBy": $(this).attr("value"); },
                contentType: "text/html;charset=utf-8",
                success: function (responce)
                {
                    $("#results").html(responce);
                }
 });
 });
于 2015-08-26T20:00:01.870 に答える