Javascript、Razor/MVC3 中的 C# if 语句

Posted

技术标签:

【中文标题】Javascript、Razor/MVC3 中的 C# if 语句【英文标题】:C# if statement within Javascript, Razor/MVC3 【发布时间】: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 查看我对以下答案的评论: 【参考方案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 标记是如何转义的...

【讨论】:

注意你可以使用@:标签来表示非MVC代码(而不是&lt;text&gt;...&lt;/text&gt;)。见weblogs.asp.net/scottgu/…【参考方案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)();
    

这对我很有效

【讨论】:

以上是关于Javascript、Razor/MVC3 中的 C# if 语句的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的对象

[JavaScript]JavaScript中的Array

javascript获取html表单中的值?

JavaScript中的对象

javascript JavaScript中的枚举和词典,循环/枚举javascript对象

javascript中的DOM