Asp.net mvc 在复选框事件中未通过控制器上的ajax调用获取tempdata值

Asp.net mvc 在复选框事件中未通过控制器上的ajax调用获取tempdata值,asp.net-mvc,asp.net-mvc-ajax,jquery-ajaxq,Asp.net Mvc,Asp.net Mvc Ajax,Jquery Ajaxq,我想将参数发送到我的控制器。这是我的查看页面: <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

我想将参数发送到我的控制器。这是我的查看页面:

<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");
                }
            })
        });
我已经检查了tempdata值,它在查看页面上显示值

但当我触发复选框更改事件并传递tempdata值时,我得到的是null值

我不知道有什么问题


有人能猜出来吗?

虽然你可能已经找到了答案,但对于其他有同样问题的人,我将添加我的答案

正如Stephen Muecke所建议的,您可以使用隐藏值根据checbox changed事件更新您的值

您还可以获取复选框的当前值并传递给控制器, 你只需要这一行

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);
                }
 });
 });

但在这一点上它真的有价值吗?在该函数的第一行中,添加`console.log('@TempData[“OrderBy”]');并检查
@TempData[“OrderBy”]
仅在您首次加载页面时计算一次(它不会动态更新,因为您返回的是部分视图,并且它包含不同的值)。我建议您将该值放入partial中的一个隐藏输入中,并在脚本中检索它。返回json可能会有一点改进(减少负载),但随后您必须手动构建html,因此可能需要大量额外的代码。我真的无法评估你的情况下什么是最好的或最简单的。在你的部分
中包含一个隐藏的输入,然后在你的方法中指定值
ViewBag.OrderBy=OrderByvar orderby=$('#orderby”).val()
获取它。但我真的不明白为什么需要它。你从未更改过它的值(实际上它是一个常量)那么,为什么要一直传递它呢?现在听起来好像这个值是根据下拉列表或视图中的某个内容设置的。为什么不声明一个变量
var orderby=null;
,然后在选择一个值时更新它(并忘记所有
ViewBag
内容)。很难说,因为您还没有发布相关的代码。
$("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);
                }
 });
 });