在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;ipublic 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;ipublic 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项目)