2015-08-20 32 views
8

我使用@:</div>正确显示一些引导列。这是我的代码,我正使用它:VisualStudio自动格式不能正确格式化我的剃须刀代码

var i = 0; 

<div class="container-fluid"> 
    <div class="row show-grid"> 
     @foreach (var one in Model) 
     { 

      if (i % 3 == 0) 
      { 
       @:<div class="row show-grid"> 
      } 

      <div class="one-element col-md-4"> 
       @one.Title 
      </div> 

      if ((i + 1) % 3 == 0) 
      { 
       @:</div> 
      } 

      i++; 
     } 
    </div> 
</div> 

它格式化的(这只要正常工作,因为我不使用VisualStudio自动格式功能):

@:</div> 

到这个:

@: 
</div> 

然后应用程序不再工作了。

这怎么解决?

+0

附注:我认为用3进行组合并使用普通Razor构造进行渲染会更好,而不是使用不匹配的标签进行黑客攻击......但的确是一种选择。 –

+0

@AlexeiLevenkov听起来不错。您能否提供一个示例或示例链接? –

+2

'items.Select((value,index)=> new {value,index})。GroupBy(x => x.index/3)'或许多其他变体开始http://stackoverflow.com/questions/29606945/ how-to-build-batches-bucket-with-linq ...搜索 - https://www.bing.com/search?q=c%23+enumerable+buckets –

回答

1

我固定它通过使用@Html.Raw()这样的:

var i = 0; 

<div class="container-fluid"> 
    <div class="row show-grid"> 
     @foreach (var one in Model) 
     { 

      if (i % 3 == 0) 
      { 
       @Html.Raw("<div class=\"row show-grid\">") 
      } 

      <div class="one-element col-md-4"> 
       @one.Title 
      </div> 

      if ((i + 1) % 3 == 0) 
      { 
       @Html.Raw("</div>") 
      } 

      i++; 
     } 
    </div> 
</div> 

我想,这是好得不能再好。

但是,如果有人知道更优雅的方式来做到这一点,请让我知道。

-2

它看起来像这里的问题是,你的前提条件是if (i % 3 == 0)打开<div>你是不是在相同的条件下if ((i + 1) % 3 == 0)关闭</div>
这意味着您可以有永不结束的开头<div>或永不开放的结束</div>
可能是你可以试试这个:

var i = 0; 

<div class="container-fluid"> 
    <div class="row show-grid"> 
    @foreach (var one in Model) 
    { 
     <div class="one-element col-md-4"> 
      @one.Title 
     </div> 

     if (i % 3 == 0) 
     { 
      <div class="clear"></div> 
     } 

     i++; 
    } 
    </div> 
</div> 

可能这就是你有麻烦! 我更新了你的评论。 更新于@Alexei Levenkov评论。我也在寻找一个更好的方式来做到这一点。这个解决方案是我在项目中做的,当我需要每行3列时。

+0

我知道...但是,如果我打开并关闭if语句中的标记,我应该如何使每个1行的3列工作? –

+0

我更新了我的代码,以反映每行3列。此代码适用于我。您可以在3个元素之后清除行,这会将您带回到新行。 – Tchaps

+0

考虑删除关于OP代码正确性的完全不公正的陈述......也不是说您的更改会产生与OP完全不同的标记 - 所以我认为downvote仍然是有道理的。 –

0

好了,我现在得到的,我是错的<text>标签和here is why

在剃刀,标签必须正确嵌套。 <text></div></text>不是 正确的嵌套。

通过@Alexei Levenkov解决你的问题提的最佳方式:

<div class="container-fluid"> 
    <div class="row show-grid"> 
     @foreach (var one in Model.Select((value, index) => new { value, index }).GroupBy(x => x.index/3)) 
     { 
      <div class="row show-grid"> 
       @foreach (var el in one.Select(x => x.value)) 
       { 
        <div class="one-element col-md-4"> 
         @el.Title 
        </div> 
       } 
      </div> 
     } 
    </div> 
</div> 

但是,根据您的this answer方法Html.Raw()好足够多。

+0

你刚才复制了'Alexei Levenkov'的回答/评论。我认为他应该得到信用。也许他甚至会把它写成答案。 –

+0

@JoSmo yeap,你说得对 –