在运行时使用 AJAX 传递布尔模型 属性

Passing boolean model property with AJAX at runtime

我正在尝试将我的模型的 属性 传递给 AJAX 表单,但是由于 bool 解析为 "true/false" 我遇到了问题。

$.ajax({
    url: '/Projects/SearchTable2',
    type: "GET",
    data: {
        sub_num: @Model.SubmissionNumber,
        read_only: @Model.ReadOnly,
    }
});

Model.ReadOnly 解析为 true 或 false,当我尝试执行代码时会抛出 Uncaught ReferenceError: False is not defined。是否有解决方法,或者我可以通过其他方式将变量传递给 Controller 方法?

当razor执行视图中的代码时,会向浏览器输出如下代码

read_only: True,

假设 @Model.ReadOnly returns 布尔值真。

在C#中布尔值是TrueFalse,但在js中,它是小写的truefalse

所以当浏览器的 javascript 框架尝试执行此代码时,它不会将 True 视为 true。它认为 True 是一个 js 变量。但是由于我们之前没有定义它,我们得到了 "True is not defined" 错误!

你要做的就是把C#代码产生的boolean值转换成js可以理解的东西。调用 ToString() 并调用 ToLower,这会将 True 转换为 true

$.ajax({
    url: '/Projects/SearchTable2',
    type: "GET",
    data: {
        sub_num: @Model.SubmissionNumber,
        read_only: @Model.ReadOnly.ToString().ToLower(),
    }
});

@Model.ReadOnly 呈现为 Capital Boolean (True) 并且 JavaScript 对此一无所知,因此只需更改您的代码即可:

$.ajax({
    url: '/Projects/SearchTable2',
    type: "GET",
    data: {
        sub_num: @Model.SubmissionNumber,
        read_only: @Model.ReadOnly.ToString().ToLower(),
    }
});