【问题标题】:Passing boolean model property with AJAX at runtime在运行时使用 AJAX 传递布尔模型属性
【发布时间】:2017-11-23 02:12:33
【问题描述】:

我正在尝试将模型的属性传递给 AJAX 表单,但由于布尔解析为“真/假”,我遇到了问题。

$.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 方法?

【问题讨论】:

  • 将@Model.ReadOnly 更改为@Model.ReadOnly.ToLower()
  • @MajidParvin 没有 bool 类型的成员函数 .ToLower()
  • 我的意思是@Model.ReadOnly.ToString().ToLower()。
  • @MajidParvin 太好了,这很有效。您能否将其作为问题的答案,以便我接受它作为答案?
  • @MajidParvin 我需要等 5 分钟,然后我会的。再次感谢您的帮助!

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    read_only: True,
    

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

    在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(),
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2019-11-15
      • 2021-06-30
      相关资源
      最近更新 更多