Ajax 当向MVC控制器发布json stringify对象时,所有布尔值都为false

Ajax 当向MVC控制器发布json stringify对象时,所有布尔值都为false,ajax,asp.net-mvc-4,post,stringify,Ajax,Asp.net Mvc 4,Post,Stringify,我有一个简单的get控制器 [HttpPost] public dynamic Get(UserPreferenceDto userPreference, bool onlyGlobal = false) { } 以及向其发布的AJAX查询: var userPreference = /* some complex object */ query({ type: "POST", url: that

我有一个简单的get控制器

    [HttpPost]
    public dynamic Get(UserPreferenceDto userPreference, bool onlyGlobal = false)
    { 
    }
以及向其发布的AJAX查询:

var userPreference = /* some complex object */
        query({
            type: "POST",
            url: that.setting.host + "UserPreference/Get",
            cache: false,
            contentType: 'application/json',
            dataType: 'json',
            data: JSON.stringify({ userPreference: userPreference, onlyGlobal: 'true' })
        }).done(function (result) {
            console.log(result);
        }).fail(function (result) {
            console.log(result);
        });
当我调试时,控制器上的userPreference是正确的,但是onlyGlobal bool总是false

我几乎什么都试过了:

data: JSON.stringify({ userPreference: userPreference, onlyGlobal: 'true' })
data: JSON.stringify({ userPreference: userPreference, onlyGlobal: true })
data: JSON.stringify({ userPreference: userPreference, onlyGlobal: "TRUE" })
data: JSON.stringify({ userPreference: userPreference, onlyGlobal: 1 })
data: JSON.stringify({ userPreference: userPreference, onlyGlobal: '1' })
data: JSON.stringify({ userPreference: userPreference, onlyGlobal: "1" })
data: { userPreference: JSON.stringify(userPreference), onlyGlobal: true })
data: "?userPreference=" + JSON.stringify(userPreference)+"&onlyGlobal=true" 
我的东西快用完了,我可以试着把那个愚蠢的布尔值作为“真”传递给控制器。无论我向复杂对象添加了多少数据,它都是正确的

有什么想法吗

更新 我认为我正在努力做的是不可行的。MVC可以找出一个基本类型列表,也可以找出一个复杂对象。
如果不提供一个定制的活页夹,它就不能同时做到这两个方面,这是一个遗憾,因为它看起来相对简单。如果有人知道解决方法,或者可以提供一个简单的活页夹来处理它,请继续,我会接受你的回答

我也有同样的问题,我不知道这有什么问题,但在我的情况下,我改变了方法并发布了如下数据 局部视图

<script>function GetPostalAddress() {
var PostalAddress = {};
PostalAddress.CountryID = _("CountryID");
PostalAddress.CityID = _("CityID");
PostalAddress.ProvinceID = _("ProvinceID");
PostalAddress.ZipCode = _("ZipCode");
PostalAddress.StreetAddress = _("StreetAddress");
return PostalAddress;
}</script>
函数GetPostalAddress(){ var PostalAddress={}; PostalAddress.CountryID=U8;(“CountryID”); PostalAddress.CityID=uU8;(“CityID”); PostalAddress.ProvinceID=u(“ProvinceID”); PostalAddress.ZipCode=uu(“ZipCode”); PostalAddress.StreetAddress=uu(“StreetAddress”); 退回邮资; } 对于使用这些局部视图的窗体 您还将包括ajax函数
希望不会太晚,并且会有所帮助。

为什么要使用此参数声明?-
bool onlyGlobal=false
这只是可选的默认声明,因此有人可以通过只传递一个参数来调用控制器方法。您应该将其设置为可选-
bool?只有全局
@Manoz不作为问题,Op使用可选参数,因为bool?使其可为空。不一样。使用默认值,您可以只使用一个参数来声明方法:Get(userPreference)。无论如何,我不认为默认值有任何区别,因为如果我只声明bool onlyGlobal,我也会遇到同样的问题