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

时间:2017-06-20 13:36:58

标签: javascript ajax asp.net-mvc razor asp.net-ajax

我试图将我的模型的属性传递给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方法?

2 个答案:

答案 0 :(得分:2)

@Model.ReadOnly呈现为Capital Boolean (True)且JavaScript不知道,所以只需将代码更改为:

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

答案 1 :(得分:0)

当razor在视图中执行代码时,它会将以下代码输出到浏览器

read_only: True,

假设@Model.ReadOnly返回布尔值为真。

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

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

你要做的是,将C#代码产生的布尔值转换为js理解的东西。致电ToString()并致电ToLower,将True转换为true

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