Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 按字符串名称列出的MVC模型属性_Asp.net Mvc_Vb.net - Fatal编程技术网

Asp.net mvc 按字符串名称列出的MVC模型属性

Asp.net mvc 按字符串名称列出的MVC模型属性,asp.net-mvc,vb.net,Asp.net Mvc,Vb.net,填写表格的常用方法是: @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</td>
      <td>currentitem.Data2</td>
      <td>currentitem.Data3</td>
   </tr>
Next
模型中每个项目的
@
当前项目=项目
@
currentitem.Data1
currentitem.Data2
currentitem.Data3
下一个
但出于某些原因(为了控制列的顺序),我希望通过字段的字符串名称来引用字段,如下所示:

@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
模型中每个项目的
@
当前项目=项目
@
当前项(“数据1”)。值
currentitem(“数据2”).值
当前项(“数据3”)。值
下一个

这有可能吗?

好的-现在我们已经确定您需要更改视图模型的顺序,让我们对视图模型做一些工作,以便更轻松地更改顺序。考虑到我们必须改变我们显示事物的顺序,我们必须有一种方法来跟踪以什么顺序显示它们。要在视图中动态更改,而不具有不同顺序的不同视图(可能会很快变得混乱),那么让我们稍微更新一下我们的模型

假设这是您的视图模型

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;}
}
现在,让我们将视图模型更新为这些数据属性的集合。我们使用的是可以枚举的东西,并按显示顺序排序

public class UpdatedViewModel{
   public IEnumerable<DataProperty> DataSet {get;set;}
}
public类UpdatedViewModel{
公共IEnumerable数据集{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;
var listOfItems=new List();
Add(新数据属性{Data=“data1”,DisplayOrder=2});
Add(新数据属性{Data=“data2”,DisplayOrder=3});
Add(newdataproperty{Data=“data3”,DisplayOrder=1});
var model=新更新的ViewModel();
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>
}}
@{foreach(Model.OrderBy(x=>x.Data.DisplayOrder)中的变量项){
@项目.数据
@项目.数据
@项目.数据
}}
哪个应该用HTML呈现

<tr>
   <td>data3</td>
   <td>data1</td>
   <td>data2</td>
</tr>

数据3
数据1
数据2

谢谢你汤米

我试着用一种简单的方法解决它,并做到了:

例如,我有一个Viewdata,其中包含列的顺序:

ViewData("columnsorder")="|3|1|2|"
然后,我只是循环查看数据并设置列

@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
模型中每个项目的
@
当前项目=项目
@
@对于i As Integer=1到ViewData(“columnsorder”).ToString.Split(“|”).Count-2
Dim ind As Integer=ViewData(“列排序器”).ToString.Split(“|”)(i)
选择案例索引
案例1@@currentItem.Data1
案例2@@currentItem.Data2
案例3@@currentItem.Data3
结束选择
下一个
下一个

这不是您引用模型项的方式。唯一可行的方法是将您的模型设置为
字典。
。尽管如此,您的理由毫无意义。“控制列的顺序”是什么意思?您可以用强类型模型轻松做到这一点。Tommy,谢谢。是的,这是一个愚蠢的问题,但是我想我可以这样做。这不是一个愚蠢的问题。我只是很难理解你为什么要这样做。我问你是因为如果我们更好地理解你为什么要这样做,我们可能会向你展示一种更好/不同的方法,而不是像你问的那样使用松散类型的变量。例如,在一种情况下,我必须在另一种情况下(data2,data3,data1),如何按以下顺序(data1,data2,data3,data1)显示列。据我所知,在控制器中执行此操作的更好方法是,但是否可以在视图中更改它?如果您的属性如您所述,则很难将其清理干净。如果您有一个
数据的集合
,则可以在控制器中控制集合中项目的顺序,并对每个项目进行迭代(不使用字符串名称)。或者,如果您有预定义的列顺序,则可以创建多个局部视图,并根据需要的顺序有条件地呈现它们。