【问题标题】:C# if statement within Javascript, Razor/MVC3Javascript、Razor/MVC3 中的 C# if 语句
【发布时间】:2012-03-29 16:19:22
【问题描述】:

好的,所以我尝试在我的 javascript 中使用“if”语句。根据我模型中的布尔值,函数应该返回一些 html 或空字符串。这基本上就是我想做的:

function getSomeHtml() {
var myHtml = '';
@if(Model.UseSomeNiceHtml)
{
<text> 
myHtml += '<div> <p class="label">Whatever</p></div>'; 
</text>
}
return myHtml;
}

类似的代码在使用 foreach 循环时效果很好(在上面的示例中基本上用 foreach 替换了 if)。使用 if 语句时,我收到错误 “遇到没有匹配开始标签的结束标签“文本”。你的开始/结束标签是否正确平衡?”。当我删除 &lt;text&gt; 标记时,我收到错误 "Too many characters in character literal"

谁能指出我正确的方向?

谢谢! :)

【问题讨论】:

  • &lt;text&gt; 标签的意义何在?看起来if 语句只是确定myHtml 是否应该更改。如果是这种情况,我看不到 `´ 标签的意义。
  • 删除 时出现错误 Too many characters in character literal。我在 foreach 循环中使用 元素,它工作正常。
  • 但是&lt;text&gt;标签有什么作用?
  • @AndersDaniel 查看我对以下答案的评论:

标签: c# javascript asp.net-mvc-3 razor


【解决方案1】:

好的,这对我有用。刚刚测试过。

function getSomeHtml() {
    var myHtml = '';
    @{
        if (Model.UseSomeNiceHtml)
        {
            <text> 
            myHtml += '<div> <p class="label">Whatever</p></div>'; 
            </text>
        }
    }
    return myHtml;
}

我添加了一组额外的{}

【讨论】:

  • 查看我在原始问题中的编辑,了解我是如何解决问题的 :)
  • 我认为你不必逃避那些斜线 - 我没有,它奏效了。但是在您的编辑中,您还完成了我在回答中所做的事情,即在 C# 代码周围添加了{}
  • 是的,没错,但实际上并不需要。问题似乎是,例如,如果您只有一行上的结束标签,解析器的内容无法与起始标签匹配。尝试将您的答案分成两行(分两步添加到 myHtml)并查看:)跨度>
  • 您很可能不需要转义斜线。在您的编辑中,您实际上并没有转义所有结束标签斜杠吗?您是否尝试过自己的示例而不逃避它们?编辑:我会尝试并回复你。
  • 我现在也尝试在 myHtml 中添加两行,这没有问题。我可以在一行中为自己添加'
    ',它工作得很好。此外,我刚刚发现您的原始代码可以正常工作(同时添加两行单独的代码)。我很傻,没有先尝试过。
【解决方案2】:

好的,首先:感谢您的意见,这让我开始思考。最终我找到了解决方案,问题是结束 html 标记中的未转义“/”。这些标签没有转义,我的标签吓坏了。无论如何,我想我会与您分享我完成的代码的样子。我想它可以作为如何在 javascript 函数中同时使用 C# 循环和 if 语句的示例。

function getSubActivitiesHtml(participantId) {
var html = "";
@{
if(Model.UseSubActivities)
{
<text>
html += "<div class=\"textinput req\"><div class=\"checkbox req\">";
</text>

foreach (var subActivity in Model.SubActivities)
{
<text> 
html += "<p><input id=\"activity_" + participantId + "_@(subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "_@(subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
}

<text>
html += "<\/div><p class=\"label\">Delaktiviteter</p><\/div>";
</text>  
}
}

return html;
}

注意结束 html 标记是如何转义的...

【讨论】:

【解决方案3】:

尝试删除&lt;text&gt; 标签或将它们放在myHtml += ''; 语句中

【讨论】:

  • 我会说删除它们,它们没有用。
  • 不知道他的 html 和 css 是什么,他可能会使用 标签来做某事,这就是删除或移动的原因:)
  • 我认为 是用来告诉 Razor 解析器将标签之间的任何内容视为文本...
  • @ErikKinding 正确。删除 &lt;text&gt; 标记时出现的“字符文字中的字符过多”错误是因为它试图将 myHtml += 行解析为 C#。在 C# 中'x' 是一个字符,它只能是一个字符。所以你包含&lt;text&gt;标签是对的。
  • 查看我在原始问题中的编辑,了解我是如何解决问题的 :)
【解决方案4】:

试试这个:

  function getSomeHtml() {
    @{
      var myHtml = "";
      if(Model.UseSomeNiceHtml)
      {
        myHtml += "<div> <p class='label'>Whatever</p></div>";
      }
    }
    return "@myHtml";
  }

【讨论】:

  • 查看我在原始问题中的编辑,了解我是如何解决问题的 :)
【解决方案5】:

这也有效。

function getSomeHtml() {
    var myHtml = '';
    if('@Model.UseSomeNiceHtml' === '@true')
    {
         myHtml += '<div> <p class="label">Whatever</p></div>'; 
    }
    return myHtml;
}

【讨论】:

    【解决方案6】:
    function  @(treeviewConfig.AddNewTreeviewNode)(treeNode) {
            @if (!string.IsNullOrEmpty(NodeIDKey) && !string.IsNullOrEmpty(treeviewConfig.ParentIdExpr)) {
                <text>
                    treeNode['@(treeviewConfig.ParentIdExpr)'] = treeNode['@(NodeIDKey)'];
                    treeNode['@(NodeIDKey)'] = 0;
            </text>
            }
            @if ( !string.IsNullOrEmpty(treeviewConfig.DisplayExpr)) {
                   <text>
                treeNode['@(treeviewConfig.DisplayExpr)'] =  'nue';
             </text>
            }
    
            @if ( !string.IsNullOrEmpty(treeviewConfig.EditTreeviewNode)) {
                 <text>
                 treeNode['@(treeviewConfig.EditTreeviewNode)'] = 'nue';
             </text>
    
            }
    
            PopulateTreeViewNodeInputs(treeNode);
           @(treeviewConfig.ShowTreeEditPopup)();
        }
    

    这对我很有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多