【问题标题】:AJAX Parameter to MVC Controller isn't NULL?MVC 控制器的 AJAX 参数不是 NULL 吗?
【发布时间】:2017-07-16 15:15:29
【问题描述】:

我有一个下拉列表,我可以在其中选择位置来过滤我的数据。

我有一个数组,我使用 AJAX 将它发布到我的控制器。在我的本地计算机上,当我没有从下拉列表中选择任何内容时,我得到的参数为空,正如预期的那样。但是,在我的实时网站上,该变量似乎不为空,因为它查询数据,因此结果为空。

这怎么可能?我希望该值为空,这样我就可以正确过滤数据。

谢谢, 斯蒂芬

jQuery

$("#main").on("click", "#submit-search-catalog", function () {
    var url = "/Home/Catalog";

    var locations = $("#County").val();

    if (url != "") {
        $.post(url, { locations: locations },
        function (data) {
            if (data) {
                $(".catalog-container").html(data);
            }
        }).fail(function (xhr, status, error) {
            alert("Error");
        });
    }

    return false;
});

MVC 控制器

    public async Task<ActionResult> Catalog(int[] locations = null)
    {

        var companies = await db.Users.Where(u => u.IsVisibleInCatalog.Equals(true)).OrderBy(u => u.CompanyRegistrationDate).ToListAsync();

        //Sort locations
        if (!(locations == null || locations.Length == 0))
        {
            companies = companies.Where(c => locations.Contains(c.CompanyLocation) || c.CompanyLocation.Equals(1)).ToList();
        }

        var model = new CatalogViewModel
        {
            Companies = companies
        };

        if (Request.IsAjaxRequest())
        {
            return PartialView("~/Views/Home/_CatalogListPartial.cshtml", companyList);
        }

        return View(model);
    }

-- 编辑

我试过这个进行错误测试,在本地它警告“空”而服务器端它警告“空”:

    if (locations == null)
        alert("null");

    if (locations.length == 0)
        alert("empty");

【问题讨论】:

  • 你检查过你服务器上的 jquery 版本了吗?
  • html元素长什么样?可以发一下吗?
  • 这是Website,我使用的是razorview。我想这样检查会更容易吗?
  • 不,您的网站可以更改。最好在此处包含相关的html,以便将来可以帮助其他人。
  • 我编辑了@post。不过,我在 html 下使用 razorview。

标签: c# ajax asp.net-mvc


【解决方案1】:

在 jquery 上选择喜欢 $("#County").val(); 可能是基于版本的问题。在 val() 函数上;在 jQuery 3.0 中,如果未选择任何选项,则返回一个空数组;在 jQuery 3.0 之前,它返回 null。 但它可以更改为对象类型,如单选按钮或组合。

【讨论】:

  • 这是相同的 jQuery 服务器端和本地,所以这可能不是问题,或者可以吗?
  • 你使用的 jquery 版本是什么?
  • 我使用的是 jQuery 3.1.1
  • #County 到底是什么类型?
  • 不,你没有。我在自己的系统上试过,在 jquery 3.0 之前它返回 null,在 3.0 版本之后它返回 empy。您可以使用 console.logging 和 $.fn.jquery 进行版本检查。可能是缓存什么的。确保双方的版本控制相同。有时在部署错误的 jquery 包时可以通过 Visual Studio 上传。
【解决方案2】:

在您的脚本中进行类型检查。 而不是这个:

if (url != "")

试试这个:

 if (url !== "")

【讨论】:

  • 你是对的,但它确实是双向的。不影响我遇到的问题。
  • 如果是这样,您必须记录 url 的值,因为您无权在服务器上进行调试。当从下拉列表中未选择任何内容时,记录并查看设置为 url 的值。我真的很好奇这个!
  • 或者,尝试为下拉列表设置一个永远存在的选项(如“无”)并将设置为默认选项。您可以根据“无”值过滤数据,而不是空字符串。这样,您的下拉选择选项将不会是一个悬空的东西(因为它似乎在这里)
  • @ethorn10 抱歉匆忙。我的 cmets 在县城附近。
猜你喜欢
  • 2021-07-01
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多