web-dev-qa-db-ja.com

JavaScript、Razor / MVC3内のC#ifステートメント

わかりました、それで私は私の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ステートメントを使用すると、エラーが発生します"一致する開始タグのない終了タグ"テキスト "が発生しました。開始/終了タグは適切にバランスされていますか?"<text>タグを削除すると、エラー"文字数が多すぎます"が発生します。

誰かが私を正しい方向に向けることができますか?

ありがとうございました! :)

18
Erik Kinding

わかりました、最初に:あなたの入力をありがとう、それは私を考えさせました。最終的に私は解決策を見つけました、そして問題は閉じた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タグがどのようにエスケープされるかに注意してください...

9
Erik Kinding

わかりました、これは私のために働く何かです。たった今テストされました。

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

{}の追加セットを追加しました。

33
AndersDaniel

<text>タグを削除するか、myHtml += '';ステートメント内に配置してください

1
trembon

これも機能します。

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

これを試して:

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