gpt4 book ai didi

razor - 获取脚手架以特定顺序生成字段

转载 作者:行者123 更新时间:2023-12-05 05:22:26 26 4
gpt4 key购买 nike

我正在尝试让 asp.net core MVC 搭建一个 Razor View ,其中的字段顺序与明显的默认字母顺序不同。我有一个简单的模型:

public class Application : EntityBase
{
[Display(Name = "Naam", Order = 1)]
public string Name { get; set; }

[Display(Name = "Omschrijving", Order = 2)]
public string Description { get; set; }
}

我希望脚手架在描述之前为名称生成一个字段。如何做到这一点?

我一直在尝试在 Razor 模板中提出解决方案。相关代码为:

...
IEnumerable<PropertyMetadata> properties = Model.ModelMetadata.Properties;
foreach (var property in properties)
{
if (property.Scaffold && !property.IsPrimaryKey && !property.IsForeignKey)
{
...

我希望一个属性有一个 Order-property,这样我就可以写类似的东西

foreach (var property in properties.OrderBy(p => p.Order))

有什么想法吗?

最佳答案

因此,经过一些(深入的)挖掘,我想出了一个解决方案。因为我已经自定义了模板,所以可以添加另一个自定义项。我最终创建了一个辅助类 ScaffoldHelpers.cs:

public class ScaffoldHelpers
{
public static IEnumerable<PropertyMetadata> GetPropertiesInDisplayOrder(string typename, IEnumerable<PropertyMetadata> properties)
{
Type type = Type.GetType($"{typename}, {typename.Split('.')[0]}");
SortedList<string, PropertyMetadata> propertiesList = new SortedList<string, PropertyMetadata>();
foreach (PropertyMetadata property in properties)
{
int order = 0;
if (type != null)
{
var member = type.GetMember(property.PropertyName)[0];
var displayAttribute = member.GetCustomAttribute<System.ComponentModel.DataAnnotations.DisplayAttribute>();
if (displayAttribute != null)
{
order = displayAttribute.Order;
}
}
propertiesList.Add($"{order:000} - {property.PropertyName}", property);
}
return propertiesList.Values.AsEnumerable();
}

}

这会遍历所有属性,并确定是否指定了 [Display()] 属性。如果是这样,它就获取 Order-parameter 的值。如果您不指定此项,Order-property 将为零。使用 SortedList 并确保键按指定顺序排序,我能够轻松返回 IEnumerable<PropertyMetadata>按所需的顺序。

在模板中,我需要添加 @using对于这个助手类。之后,我可以将以下内容插入到模板中:

...
IEnumerable<PropertyMetadata> properties = Model.ModelMetadata.Properties;

// added:
properties = ScaffoldHelpers.GetPropertiesInDisplayOrder(Model.ViewDataTypeName, properties);

foreach (var property in properties)
{
if (property.Scaffold && !property.IsPrimaryKey && !property.IsForeignKey)
{
...

就是这样!

关于razor - 获取脚手架以特定顺序生成字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40530823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com