定义模型mvc4中的属性顺序

时间:2013-08-06 06:53:20

标签: asp.net-mvc-4

我们使用DisplayForModel()以网格格式显示模型属性。

我只想知道是否有任何方法可以定义元数据属性的顺序。

例如:

当前显示:Party,PartyRole,Id,Title FromDate,ThruDate

所需显示:标题,派对,PartyRole,FromDate,ThruDate,Id

有可能以任何方式???

显示模板 - object.cshtml

@functions
{
bool ShouldShow(ModelMetadata metadata)
{
    return metadata.ShowForDisplay
        && metadata.ModelType != typeof(System.Data.EntityState)
        && !metadata.IsComplexType
        && !ViewData.TemplateInfo.Visited(metadata);
}
}
<table>
<tr>
    @if (TempData["header"] == null)
    {
        foreach (var property in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm)))
        {
            if (property.DisplayName != "Id")
            { 
        <th>
            @property.GetDisplayName()
        </th>
            }
        }
        TempData["header"] = "true";
    }
</tr>
<tr>
    @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm)))
    {
        if (prop.DisplayName == "Id")
        {
             <td>@Html.ActionLink("Edit", "Edit", new { id = @Html.Display(prop.PropertyName)  }) </td>
        }
        else
        { 
           <td>@Html.Display(prop.PropertyName)</td>
        }
    }
    </tr>
</table>

grid.cshtml

@model IEnumerable<object>
<div class="grid">
@Html.DisplayForModel()

</div>
<div id="my-dialog"></div>

提前多多感谢..

1 个答案:

答案 0 :(得分:1)

如果您使用的是默认DataAnnotationsModelMetadataProvider,则可以在模型的属性上使用DisplayAttribute的{​​{1}}属性(info here),即(猜测)在您的ViewModel上):

Order
默认情况下,

public class ViewModel { [Display(Order = 1)] public string Party { get; set; } [Display(Order = 2)] public SomeRole PartyRole { get; set; } [Display(Order = 5)] public int Id { get; set; } [Display(Order = 0)] public string Title { get; set; } [Display(Order = 3)] public DateTime FromDate { get; set; } [Display(Order = 4)] public DateTime ThruDate { get; set; } } 按该属性值排序。

请注意,在大多数情况下,这在模型中使用继承时才有意义 - 因为如果所有属性都是在单个ViewModel类上定义的,那么只需将它们按照正确的顺序放入单个ViewModel类中即可。第一名,即:

ModelMetadata.Properties