C# MVC WebGrid动态内容
我想要达到的目标很难解释,所以如果我能提供更多信息,请告诉我。我有一种感觉,我试图超越他们的能力来使用WebGrids,所以如果有人有任何开源的替代方案来做我正在尝试的事情,那也会很有帮助 我需要从头开始构建WebGrid,因为返回到它的内容(列和值)会根据表单上的其他条件而变化。我在一个表中的几行简单代码中就可以实现这一点,但我想使用WebGrid进行样式设置、排序和分页C# MVC WebGrid动态内容,c#,asp.net-mvc,dynamic,asp.net-mvc-4,webgrid,C#,Asp.net Mvc,Dynamic,Asp.net Mvc 4,Webgrid,我想要达到的目标很难解释,所以如果我能提供更多信息,请告诉我。我有一种感觉,我试图超越他们的能力来使用WebGrids,所以如果有人有任何开源的替代方案来做我正在尝试的事情,那也会很有帮助 我需要从头开始构建WebGrid,因为返回到它的内容(列和值)会根据表单上的其他条件而变化。我在一个表中的几行简单代码中就可以实现这一点,但我想使用WebGrid进行样式设置、排序和分页 @model DocumentSearchViewModel @if ((this.Model != null) &am
@model DocumentSearchViewModel
@if ((this.Model != null) && (this.Model.SearchResults != null) && (this.Model.SearchResults.Count() > 0))
{
<table>
<thead>
<tr>
<th>Document</th>
@foreach (var metadata in this.Model.SearchResults.Metadata)
{
<th>
@metadata.InstanceFieldName
</th>
}
</tr>
</thead>
<tbody>
@foreach (var document in this.Model.SearchResults)
{
<tr>
<td>
@Html.ActionLink(document.Id.ToString(), "Details", new { id = document.Id })
</td>
@foreach (var metadata in document.Metadata)
{
<td>
@metadata.Value
</td>
}
</tr>
}
</tbody>
</table>
}
@model DocumentSearchViewModel
@if((this.Model!=null)&&(this.Model.SearchResults!=null)&&(this.Model.SearchResults.Count()>0))
{
文件
@foreach(this.Model.SearchResults.metadata中的var元数据)
{
@metadata.InstanceFieldName
}
@foreach(此.Model.SearchResults中的var文档)
{
@ActionLink(document.Id.ToString(),“Details”,新的{Id=document.Id})
@foreach(document.metadata中的var元数据)
{
@元数据.值
}
}
}
因此,为了解释模型结构,SearchResults有一个IEnumerable
,这个元数据模型有InstanceFieldName和Value属性。执行搜索时,每个结果都将始终具有相同数量的元数据、相同的InstanceFieldNames,但值不同,但是快速更改表单上的字段和新搜索可能会返回一组新结果(同样,每个结果都具有相同的元数据集,但与第一组结果不同)
网格的列对应于元数据InstanceFieldName,内容对应于值
因此,我尽了最大努力使用WebGrid,但我能得到的最好结果是一个具有正确列标题和正确行数的网格,列具有正确的数据,但每一行都是相同的(从最后一行复制)
@{
var grid=new WebGrid(canPage:true,canSort:true,rowsPerPage:Model.PageSize,sortFieldName:Model.Sort,sortDirectionFieldName:Model.SortDir);
Bind(Model.SearchResults,rowCount:Model.DocumentCount);
List cols=新列表();
foreach(Model.SearchResults.Select(r=>r.metadata.FirstOrDefault()中的变量元数据)
{
var col=新的WebGridColumn();
col.ColumnName=metadata.InstanceFieldName;
col.Header=metadata.InstanceFieldHeader;
col.Style=“gridRow”;
col.CanSort=true;
cols.Add(col);
}
foreach(Model.SearchResults中的var结果)
{
foreach(以cols为单位的变量col)
{
var metadataValue=result.Metadata.Single(m=>m.InstanceFieldName==col.ColumnName).Value;
col.Format=(item)=>@Html.Raw(“+metadataValue+”);
}
}
}
@if((this.Model!=null)&&(this.Model.SearchResults!=null)&&(this.Model.SearchResults.Count()>0))
{
@GetHtml(htmlAttributes:new{id=“documentGrid”},rowStyle:“gridRow”,alternatingRowStyle:“gridRowAlt”,columns:cols)
}
我试图解决的是如何以及如果可能的话,首先生成列,然后将行填充到这些列中
非常感谢您的帮助,谢谢,Mark如果您输入的行具有相同的值,您应该更改格式:
col.Format = (item) => @Html.Raw(item.metadataValue);
col.Format = (item) => @Html.Raw(item.metadataValue);