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

C# if statement within Javascript, Razor/MVC3

本文关键字:Razor MVC3 语句 中的 C#if Javascript      更新时间:2023-09-26

好的,所以我尝试在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语句,我得到错误"遇到没有匹配的开始标记的结束标记"text"。您的开始/结束标记是否正确平衡?"。当我删除<text>标记时,我会得到错误"character literal中的字符太多"

有人能给我指正确的方向吗?

谢谢!:)

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

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

我添加了一组额外的{}

好的,首先:谢谢你的输入,它让我思考。最终,我找到了解决方案,问题是在结束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标记是如何转义的

尝试删除<text>标记或将其放入myHtml += '';语句

这也有效。

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

这对我来说效果很好

试试这个:

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

多年后刚刚在这里进行了修订。一些更现代的Razor版本现在支持这一点:

    @if (Model.isValid)
{
       @: console.log("This statement will be printed.");
}

这只打印一条语句,所以如果你必须打印多条语句,你就必须添加更多的@:行

但是您可以使用它来调用在其他地方定义的函数