我们使用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>
提前多多感谢..
答案 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