【问题标题】:Razor syntax for boolean check用于布尔检查的 Razor 语法
【发布时间】:2020-04-15 10:30:13
【问题描述】:

我在 Asp.Net Core 应用程序中有以下 Razor 语法:

if (!@string.IsNullOrWhiteSpace(Model.BasketId) && $('#product-code').val().length !== 0) {

但是,我收到以下 Javascript 错误:

ReferenceError: True is not defined

如果我查看调试部分中的 JS,则该行解析为:

if (!True && ...

这显然是不正确的 Javascript。那么如何执行像 Razor 这样的检查,以使其解析为有效的 JS?

【问题讨论】:

    标签: javascript c# asp.net-core razor


    【解决方案1】:

    如果不是大写的T,这几乎是有效的js

    你有几种方法可以解决这个问题:

    ToString 和 ToLower 将导致小写 true

    if (!@string.IsNullOrWhiteSpace(Model.BasketId).ToString().ToLower() && $('#product-code').val().length !== 0) {
    

    你也可以做一个三元 if 语句

    if (!@(string.IsNullOrWhiteSpace(Model.BasketId)?1:0) && $('#product-code').val().length !== 0) {
    

    返回 1 或 0 也会导致 js 中的真值或假值

    【讨论】:

    • 我喜欢这个,但不幸的是,string.IsNullOrWhiteSpace(Model.BasketId)?1:0 解析为 "True ? 1 : 0" 仍然无效
    • @stannage 你是否像我一样在语句周围添加了 () 括号?
    • 是的,没有区别
    • @stannage 我不知道为什么,我尝试了if (!@(true?1:0)) {,结果是if (!1) {,代码应该基本相同。您能否准确粘贴您尝试应用代码的方式?
    【解决方案2】:

    字符串可以小写:

    if (!@string.IsNullOrWhiteSpace(Model.BasketId).ToLower() && $('#product-code').val().length !== 0) {
    

    【讨论】:

    • 我确实考虑过这个,但这似乎是一个奇怪的解决方案,我认为一定有更好的方法
    • @stannage,因为 c# 和 JavaScript 是不同的语言,你必须考虑这一点:)
    【解决方案3】:

    您将 C# 和 JavaScript 组合在一行中。试试下面:

    @if (!string.IsNullOrWhiteSpace(Model.BasketId))
    {
        <script>
            if ($('#product-code').val().length !== 0)
            {
                /* Put your logic here */
            }
        </script>
    }
    

    【讨论】:

    • 它有效,但这种解决方案将很难处理更大的代码。我只推荐短代码。
    猜你喜欢
    • 2015-05-25
    • 2016-12-21
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多