在cshtml页面中处理html标记和c#脚本

在cshtml页面中处理html标记和c#脚本,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我想在这里写两栏:比如: <table id="tblCustomItemSpecifics" cellspacing="0" cellpadding="0" class="tabs-details_table" border="0" style="border-collapse:collapse;"> @if (@Model.ItemSpecification != null)

我想在这里写两栏:比如:

<table id="tblCustomItemSpecifics" cellspacing="0" cellpadding="0" class="tabs-details_table" border="0" style="border-collapse:collapse;">
                                @if (@Model.ItemSpecification != null)
                                {                                       
                                    foreach (var item in Model.ItemSpecification)
                                    {                                            

                                        <tr><td>@item.Name</td><td>@item.Value</td></tr>
                                    }
                                }
                            </table>
Item1 : test Item 

Item2 : test Item

item3 : test item

item4 : test item
我面临有条件地声明标记的问题。
希望你能理解这个问题

如果您总是希望表具有固定数量的列,则可以使用模运算符每隔一行有条件地输出新行。大概是这样的:

Item1 : test Item              Item2 : test Item

item3 : test item              item4 : test item
for(var i=0;i 这应该在循环的每个交替迭代(而不是每次迭代)发出
标记。(由于当
i
可被
2
整除时,
i%2
将仅等于
0
),这也应该在奇数列表的末尾添加一个空项


请注意,这是非常自由的代码,您可能需要做一些调整。但重点仍然是一样的。不管你有多少列,你都要检查你的计数器(
i
),看看是否该添加一个新列了。然后在循环结束时使用一些逻辑来清理表,以说明行数不均匀。

如果您始终希望表是固定数量的列,则可以使用模运算符每隔一行有条件地输出新行。大概是这样的:

Item1 : test Item              Item2 : test Item

item3 : test item              item4 : test item
for(var i=0;i 这应该在循环的每个交替迭代(而不是每次迭代)发出
标记。(由于当
i
可被
2
整除时,
i%2
将仅等于
0
),这也应该在奇数列表的末尾添加一个空项


请注意,这是非常自由的代码,您可能需要做一些调整。但重点仍然是一样的。不管你有多少列,你都要检查你的计数器(
i
),看看是否该添加一个新列了。然后在循环结束时使用一些逻辑来清理表,以说明行数不均匀。

您需要通过计数器和html.raw生成行

@for (var i = 0; i < Model.ItemSpecification.Count(); i++)
{
    if (i % 2 == 0)
    {
        <tr>
    }
    <td>@Model.ItemSpecification[i].Name</td><td>@Model.ItemSpecification[i].Value</td>
    if (i % 2 == 1)
    {
        </tr>
    }
}
if (Model.ItemSpecification.Count() % 2 != 0)
{
    <td></td></tr>
}
@{var columns=2;}
@如果(@Model.ItemSpecification!=null)
{
var列=-1;
foreach(Model.ItemSpecification中的var项)
{
如果(++列%columns==0){
@Html.Raw(“”)
}
@项目。Name@item.Value
}
}
如果要向下而不是跨列流动,请首先调用此扩展方法:

@{ var columns = 2; }
<table id="tblCustomItemSpecifics" cellspacing="0" cellpadding="0" class="tabs-details_table" border="0" style="border-collapse:collapse;">
      @if (@Model.ItemSpecification != null)
      {
          var column = -1;                                        
          <tr>
          foreach (var item in Model.ItemSpecification)
          {
              if ( ++column % columns == 0 ) {
                  @Html.Raw("</tr><tr>")
              }
              <td>@item.Name</td><td>@item.Value</td>
          }
          </tr>
      }
</table>
公共静态列表排序(此列表源,Func OrderFunc){return Source.OrderBy(OrderFunc.ToList();} /// ///按指定的列数对列表进行排序 ///例如: /// 1 4 7 /// 2 5 8 /// 3 6 9 /// ///而不是: /// 1 2 3 /// 4 5 6 /// 7 8 9 公共静态列表列排序(此列表源,Func OrderFunc,int NumColumns),其中T:new(){ var sorted=Source.Sort(OrderFunc); var m=(int)数学上限(sorted.Count/(double)NumColumns); var n=NumColumns; var flipped=新的T[m*n]; 对于(变量i=0;i 用法示例:

public static List<T> Sort<T, U>(this List<T> Source, Func<T, U> OrderFunc) { return Source.OrderBy(OrderFunc).ToList(); }

/// <summary>
/// Sorts lists down the specified number of columns
/// for instance:
/// 1  4  7
/// 2  5  8
/// 3  6  9
/// 
/// instead of:
/// 1  2  3
/// 4  5  6
/// 7  8  9
public static List<T> ColumnSort<T, U>(this List<T> Source, Func<T, U> OrderFunc, int NumColumns) where T : new() {
    var sorted = Source.Sort(OrderFunc);
    var m = (int)Math.Ceiling(sorted.Count / (double)NumColumns);
    var n = NumColumns;
    var flipped = new T[m*n];
    for (var i = 0; i < sorted.Count; i++ )
    {
        var t = i % m * n + i / m;
        flipped[t] = sorted[i];
    }
    return flipped.ToList();
}
foreach(Model.ItemSpecification.ToList().ColumnSort中的var项(itemSpec=>itemSpec.Name,columns)
{
如果(++列%columns==0){
@Html.Raw(“”)
}
@项目。Name@item.Value
}

这是一个

您需要通过计数器和html.raw生成行

@for (var i = 0; i < Model.ItemSpecification.Count(); i++)
{
    if (i % 2 == 0)
    {
        <tr>
    }
    <td>@Model.ItemSpecification[i].Name</td><td>@Model.ItemSpecification[i].Value</td>
    if (i % 2 == 1)
    {
        </tr>
    }
}
if (Model.ItemSpecification.Count() % 2 != 0)
{
    <td></td></tr>
}
@{var columns=2;}
@如果(@Model.ItemSpecification!=null)
{
var列=-1;
foreach(Model.ItemSpecification中的var项)
{
如果(++列%columns==0){
@Html.Raw(“”)
}
@项目。Name@item.Value
}
}
如果要向下而不是跨列流动,请首先调用此扩展方法:

@{ var columns = 2; }
<table id="tblCustomItemSpecifics" cellspacing="0" cellpadding="0" class="tabs-details_table" border="0" style="border-collapse:collapse;">
      @if (@Model.ItemSpecification != null)
      {
          var column = -1;                                        
          <tr>
          foreach (var item in Model.ItemSpecification)
          {
              if ( ++column % columns == 0 ) {
                  @Html.Raw("</tr><tr>")
              }
              <td>@item.Name</td><td>@item.Value</td>
          }
          </tr>
      }
</table>
公共静态列表排序(此列表源,Func OrderFunc){return Source.OrderBy(OrderFunc.ToList();} /// ///按指定的列数对列表进行排序 ///例如: /// 1 4 7 /// 2 5 8 /// 3 6 9 /// ///而不是: /// 1 2 3 /// 4 5 6 /// 7 8 9 公共静态列表列排序(此列表源,Func OrderFunc,int NumColumns),其中T:new(){ var sorted=Source.Sort(OrderFunc); var m=(int)数学上限(sorted.Count/(double)NumColumns); var n=NumColumns; var flipped=新的T[m*n]; 对于(变量i=0;i 用法示例:

public static List<T> Sort<T, U>(this List<T> Source, Func<T, U> OrderFunc) { return Source.OrderBy(OrderFunc).ToList(); }

/// <summary>
/// Sorts lists down the specified number of columns
/// for instance:
/// 1  4  7
/// 2  5  8
/// 3  6  9
/// 
/// instead of:
/// 1  2  3
/// 4  5  6
/// 7  8  9
public static List<T> ColumnSort<T, U>(this List<T> Source, Func<T, U> OrderFunc, int NumColumns) where T : new() {
    var sorted = Source.Sort(OrderFunc);
    var m = (int)Math.Ceiling(sorted.Count / (double)NumColumns);
    var n = NumColumns;
    var flipped = new T[m*n];
    for (var i = 0; i < sorted.Count; i++ )
    {
        var t = i % m * n + i / m;
        flipped[t] = sorted[i];
    }
    return flipped.ToList();
}
foreach(Model.ItemSpecification.ToList().ColumnSort中的var项(itemSpec=>itemSpec.Name,columns)
{
如果(++列%columns==0){
@Html.Raw(“”)
}
@项目。Name@item.Value
}

这是一个

您在这里需要的只是将您的项目“批量”到大小为2的批次中。您可以在视图中或(更好)在控制器中执行此操作。最简单的方法是使用批处理:

          foreach (var item in Model.ItemSpecification.ToList().ColumnSort(itemSpec => itemSpec.Name,columns)
          {
              if ( ++column % columns == 0 ) {
                  @Html.Raw("</tr><tr>")
              }
              <td>@item.Name</td><td>@item.Value</td>
          }
或者您可以手动执行此操作:

int columnsCount = 2;
var rows = Model.ItemSpecification.Batch(columnsCount);
之后,显示行非常简单:

@{ 
  var columnsCount = 2;
  var rows = from x in Model.ItemSpecification.Select((item, index) => new { item, index })
             group x by x.index / columnsCount into g
             select g.OrderBy(x => x.index).Select(x => x.item);
}

@foreach(行中的变量行)
{
@foreach(行中的var项目)