在 jQuery Post 之后发送到控制器的空值

本文关键字:控制器 空值 jQuery Post 之后 | 更新日期: 2023-09-27 18:35:24

我有一些代码,我试图使用 Ajax post 将视图模型发送回控制器。 如果我以一种方式编写代码,它会正确传递,而另一种方式它会在视图模型中返回 null 或 0 值。

工作方式:

$(document).ready(function () {
        $(".boxItem").change(function (event) {
            var url = "/Search/GetBoxChangeInfo";
            $.post(url, @Html.Raw(Json.Encode(Model)), function (data) {
                $("#column-1").html(data);
            });
        });
    });

以及返回空值的方式:

$(document).ready(function () {
        $(".boxItem").change(function (event) {
            var url = "/Search/GetBoxChangeInfo";
            $.post(url, { json: @Html.Raw(Json.Encode(Model)) }, function (data) {
                $("#column-1").html(data);
            });
        });
    });

我需要以第二种方式使用它,因为我还需要将有关所选值和 ID 的参数传回,因此它看起来像这样:

$(document).ready(function () {
        $(".boxItem").change(function (event) {
            var str = $(this).attr('id');
            var num = $(this).val();
            var url = "/Search/GetBoxChangeInfo";
            $.post(url, { json: @Html.Raw(Json.Encode(Model)), id : str, selected : num  }, function (data) {
                $("#column-1").html(data);
            });
        });
});

顺便说一句,我的控制器看起来像这样:

[HttpPost]
public ActionResult GetBoxChangeInfo(EventViewModel json)
{ 
     //stuff
}

编辑 - 根据要求,这里是事件视图模型结构

[JsonObject(MemberSerialization.OptIn)]
public class EventViewModel
{
    public int EventNumber { get; set; }
    public List<EventItemsViewModel> EventItems { get; set; }
    public List<LocationViewModel> Locations { get; set; }
    public int StartLocationID { get; set; }
    public bool Outbound { get; set; }
    public List<int> SelectedEvents { get; set; }
    public List<DurationsViewModel> Durations { get; set; }
}

有人知道为什么会发生这种情况吗? 家是否有限制,可以通过这种方式将很多东西发送到控制器 - 这是一个相当复杂的视图模型,所以想知道这是否与它有关。

谢谢

在 jQuery Post 之后发送到控制器的空值

像这样:

$(document).ready(function () {
    $('.boxItem').change(function (event) {
        var str = $(this).attr('id');
        var num = $(this).val();
        var url = '@Url.Action("GetBoxChangeInfo", "Search")';
        $.ajax({
            url: url,
            contentType: 'application/json',
            data: JSON.stringify({ 
                json: @Html.Raw(Json.Encode(Model)), 
                id: str, 
                selected: num  
            }),
            success: function(data) {
                $("#column-1").html(data);
            }
        });
    });
});

注意事项:

  • contentType: 'application/json'
  • JSON.stringify将对象转换为 JSON 字符串
  • var url = '@Url.Action("GetBoxChangeInfo", "Search")';避免硬编码网址

家是否有限制,可以通过这种方式将很多东西发送到控制器 - 这是一个相当复杂的视图模型,所以想知道这是否与它有关。

是的,有 1000 个 HTTP 集合密钥,您可以在 web.config 中自行配置。首先尝试将值设置为 4000,然后您可以根据需要将其降低一点。试试这个:

<appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="4000" />
</appSettings>

使用这个http://api.jquery.com/jQuery.post/

$.ajax({ 类型:"开机自检", 网址:网址, 数据:数据, 成功:成功, 数据类型:数据类型});

,我的意思不是速记 Axaj 呼叫。您可以选择"成功","错误","已完成",并且可以隔离问题。

我在 ASP.NET MVC上遇到了同样的错误。在模型上,您可以ConvertEmptyStringToNull = false模型属性的属性:

[DisplayFormat(ConvertEmptyStringToNull = false)]

例如

public class Person
{
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public string Lastname { get; set; }
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public string Firstname { get; set; }
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public string Middlename { get; set; }
}

当我在这篇文章中遇到同样的事情时,我记录了:http://www.ienablemuch.com/2011/08/empty-string-is-empty-string.html