填写表格的常用方法是:
@For Each item In Model
Dim currentItem = item
@<tr>
<td>currentitem.Data1</td>
<td>currentitem.Data2</td>
<td>currentitem.Data3</td>
</tr>
Next
但由于某些原因(为了控制列的顺序),我想通过字符串名称引用字段,如下所示:
@For Each item In Model
Dim currentItem = item
@<tr>
<td>currentitem("Data1").Value</td>
<td>currentitem("Data2").Value</td>
<td>currentitem("Data3").Value</td>
</tr>
Next
有可能吗?
答案 0 :(得分:0)
好了 - 现在我们已经确定您需要更改视图模型的顺序,让我们对您的视图模型做一些工作,以便更改顺序。鉴于我们必须改变显示事物的顺序,我们必须有一种方法来跟踪显示它们的顺序。在视图中动态更改而不会有不同的顺序(可能会很快乱) - 所以让我们稍微更新我们的模型。
假设这是您的视图模型
public class OriginalViewModel{
public string Data1 {get;set;}
public string Data2 {get;set;}
public string Data3 {get;set;|
}
让我们创建一个名为DataProperty的新类。这将保存数据对象,并允许我们设置我们稍后可以排序的显示顺序。
public class DataProperty{
public int DisplayOrder {get;set;}
public string Data {get;set;}
}
现在,让我们将您的视图模型更新为一组这些DataProperties。我们正在使用我们可以枚举的内容并按显示顺序排序。
public class UpdatedViewModel{
public IEnumerable<DataProperty> DataSet {get;set;}
}
现在,您可以在每个属性元素上设置显示顺序。
var listOfItems = new List<DataProperty>();
listOfItems.Add(new DataProperty{Data = "data1", DisplayOrder = 2});
listOfItems.Add(new DataProperty{Data = "data2", DisplayOrder = 3});
listOfItems.Add(new DataProperty{Data = "data3", DisplayOrder = 1});
var model = new UpdatedViewModel();
model.Data = listOfItems;
在您的视图中,按显示顺序属性排序。请注意,我们现在可以使用Linq根据此视图的要求对数据进行适当的排序。
@{foreach(var item in Model.OrderBy(x=>x.Data.DisplayOrder){
<tr>
<td>@item.Data</td>
<td>@item.Data</td>
<td>@item.Data</td>
</tr>
}}
应以HTML格式呈现
<tr>
<td>data3</td>
<td>data1</td>
<td>data2</td>
</tr>
答案 1 :(得分:0)
谢谢 Tommy ,
我试图以简单的方式解决它并做到了这一点:
例如,我有一个包含列顺序的Viewdata:
ViewData("columnsorder")="|3|1|2|"
然后,我只是遍历ViewData并设置列。
@For Each item In Model
Dim currentItem = item
@<tr>
@For i As Integer = 1 To ViewData("columnsorder").ToString.Split("|").Count - 2
Dim ind As Integer = ViewData("columnsorder").ToString.Split("|")(i)
Select Case ind
Case 1@<td>@currentItem.Data1</td>
Case 2@<td>@currentItem.Data2</td>
Case 3@<td>@currentItem.Data3</td>
End Select
Next
</tr>
Next