2

次のコードがあります。

@foreach (Content topic in Model.Topics)
{
    if (topic.RowKey.Substring(2, 2) == "00")
    {
        <h3>@topic.RowKey.Substring(0, 2).TrimStart('0') - @Html.Raw(topic.Title)</h3>
    }
    else
    {
        <p>@String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - @Html.Raw(topic.Title)</p>
    }
}

私の入力データ (topic.RowKey の値) は次のようになります。

0100 <- This is topic 1
0101 <- This is topic 1.1
0102 <- This is topic 1.2
0103 <- This is topic 1.3
0200 <- This is topic 2
0201 <- This is topic 2.1
etc....

これは機能しますが、私が本当にやりたいのは、RowKey の最初の 2 桁が変更されるたびに h3 見出しを作成し、それから次の h3 見出しの間に、<p>xxx</p>. さまざまな組み合わせを試しましたが、何も機能しません。これはRazorでも可能ですか?私が大きな問題を抱えていたのは、どうすれば<ul>and</ul>を正しく表示できるかということでした。<ul>の後に を配置できることはわかって<h3>いますが、 を配置するにはどうすればよい</ul>ですか?

4

4 に答える 4

8

かみそりでチェックされていません。 @ があちこちにない可能性がありますが...

@var groupedTopics = Model.Topics.GroupBy(t => t.RowKey.Substring(0, 2));

@foreach (var group in groupedTopics) {
  var firstTopic = group.First();
  <h3>@firstTopic.RowKey.Substring(0, 2).TrimStart('0') - @Html.row(firstTopic.Title)</h3>
  <ul>
  @foreach (var topic in group.Skip(1)) {
      <li>@String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - @Html.Raw(topic.Title)</li>
  }
  </ul>

}
于 2012-06-08T16:42:44.620 に答える
0

ビューに送信する前にモデルの親子を作成し、データを入力する方が簡単です

モデル

public class topic {

        //everything else
        public List<topic> subtopic{ get; set; }

    }

景色

@foreach (Content topic in Model.Topics)
{
    <h3>@topic.RowKey.Substring(0, 2).TrimStart('0') - @Html.Raw(topic.Title)</h3>
    if (topic.subtopic.count > 0)
    {
        <ul>
            @foreach (Content subtopic in topic.subtopic)
            { 
                <li>@String.Format("{0}.{1}", topic.RowKey.Substring(0, 2).TrimStart('0'), topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - @Html.Raw(topic.Title)</li>
            }
        </ul>
    }
}
于 2012-06-08T16:44:25.370 に答える
0

それはカミソリの問題ではありません。これは、レンダリングエンジン、Web、Windows フォーム、またはその他のもので解決できるものです。

@model List<Topic>
@{
int currentKey = 0;
bool withinUL = false;
foreach (Topic topic in Model) 
{ 
    if (topic.RowKey != currentKey)   
    {
        currentKey = topic.RowKey;
        if (withinUL)
        {
            withinUL = false;
            @:</ul>
        }


        @:<h3>@topic.RowKey - @Html.Raw(topic.Title)</h3>     

    }   
    else   
    {       
        if (!withinUL)
        {
            withinUL = true;
            @:<ul></ul>
        }
          @:<li>@topic.RowKey - @Html.Raw(topic.Title)</li>  
    }
}
} 
于 2012-06-08T16:44:39.177 に答える
0
    @{bool isFirst = true;}
    @foreach (Content topic in Model.Topics)
    {
        if (topic.RowKey.Substring(2, 2) == "00")
        {
            if(!isFirst) {
               <text></ul></text>
               isFirst = false
            }
            <h3>@topic.RowKey.Substring(0, 2).TrimStart('0') - @Html.Raw(topic.Title)</h3>
        }
        else
        {   
            <li>
            <p>@String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - @Html.Raw(topic.Title)</p></li>
        }
    }

    </ul>
于 2012-06-08T16:33:52.230 に答える