. NET MVC应用程序,我已经创建了一个模型,客户的详细信息保存在数据库中。
当我从控制器中的数据库中检索数据时,我想从必需的字段中得到填充了多少字段。
如何在控制器上完成此操作?
这是为现有的数据库,我正在建立一个基于该数据库的新项目。
因此,当从数据库检索数据并将数据传递给视图时,我希望将其传递给必填字段,并填充此计数。
我可以把需要的字段赋给一个属性。
需要其他计数才能知道如何得到它。
这是一个示例模型
[Key]
public int Id { get; set; }
[Required]
[DisplayName("Surname")]
public string Sur_Name { get; set; }
[Required]
[DisplayName("Name")]
public string Name { get; set; }
[Required]
[DisplayName("Citizenship")]
public int Citizen_Country_Id { get; set; }
我试过了,想知道这种方法是否正确。
int countRequired = customer.GetType().GetProperties().Select(x=>x.GetValue(customer,null)).Count(c=>c ==null);
您可以为此使用反射,GetRequiredProperties
将为您提供所有必需的属性及其类型作为键值对。然后,您可以运行循环并获取每个属性的值。对于值类型,默认值应该为0,对于引用类型,默认值应该为空。您可以相应地加上支票。我给你留了一些代码,让你试着用他给出的信息来弄清楚它。
public static Dictionary<string, System.Type> GetRequiredProperties<T>()
{
var info = TypeDescriptor.GetProperties(typeof(T))
.Cast<PropertyDescriptor>()
.Where(p => p.Attributes.Cast<Attribute>().Any(a => a.GetType() == typeof(RequiredAttribute)))
.ToDictionary(p => p.Name, p => p.PropertyType);
return info;
}
foreach (var item in prop)
{
var value = obj.GetType().GetProperty(item.Key).GetValue(obj, null);
var type = item.Value;
}