2

以下を達成するためのよりエレガントなコードは何でしょうか:

foreach(var filter in Model.Filters)
{
  if(filter.Selected)
  {
    <div class="crumb crumb_selected" id="@filter.ID">
      @* much more html can be here *@
      @filter.Title
      <span class="counter">
        (@filter.Count)
      </span>
    </div>
  } else {
    <div class="crumb" id="@filter.ID">
      <a href="@Model.ClickUrl(Model.SelectedFilters, filter)">
      @* much more html can be here but similar code as above *@
        @filter.Title
        <span class="counter">
          (@filter.Count)
        </span>
      </a>
    </div>
  }
}
  • div / span の繰り返される html コードは悪いコードのようです
  • また、css-class 仕様はエレガント バージョンで解決する必要があります。
4

2 に答える 2

1
foreach(var filter in Model.Filters) 
{ 

    <div class="crumb @(filter.Selected? "crumb_selected":string.empty)" id="@filter.ID"> 
      @(filter.Selected? "<a href="@Model.ClickUrl(Model.SelectedFilters, filter)">" : string.empty)
      @filter.Title 
      <span class="counter"> 
        (@filter.Count) 
      </span> 
    </div> 
  }    
} 

基本的に、これは filter.Selected をテストするだけであり、既に持っているもののより簡潔な形式です。私は構文をテストしませんでした。頭のてっぺんから書き留めただけなので、コンパイルされない場合はご容赦ください。あなたのエレガンスの定義がわからないので、これがよりエレガントかどうかはわかりません。私はあなたがもっとDRYを意味していると思いました。

于 2012-06-04T18:23:19.943 に答える
0
@helper MyHelper(SomeDataType filter)
{
  @* much more html can be here *@
  @filter.Title
  <span class="counter">
    (@filter.Count)
  </span>
}

foreach(var filter in Model.Filters)
{
  if (filter.Selected)
  {
    <div class="crumb crumb_selected" id="@filter.ID">
      @MyHelper(filter)
    </div>
  } else {
    <div class="crumb" id="@filter.ID">
      <a href="@Model.ClickUrl(Model.SelectedFilters, filter)">
        @MyHelper(filter)
      </a>
    </div>
  }
}
于 2012-06-05T13:45:54.370 に答える