我有一个ViewModel,其中包含的属性可以可选从我的Web应用程序的用户填充(例如名字,姓氏,电子邮件,日期出生等)。这些属性包括几个类型,如字符串,布尔型int,小数点,双精度型,DateTime。所有这些类型在ViewModel中都可以为空或不可空。如何检查ViewModel的任何属性是否已填充
如果这些属性中至少有一个已被填充,那么我必须创建一个数据库记录。您是否有任何想法来检查这些可选值是否已填充?
我有一个ViewModel,其中包含的属性可以可选从我的Web应用程序的用户填充(例如名字,姓氏,电子邮件,日期出生等)。这些属性包括几个类型,如字符串,布尔型int,小数点,双精度型,DateTime。所有这些类型在ViewModel中都可以为空或不可空。如何检查ViewModel的任何属性是否已填充
如果这些属性中至少有一个已被填充,那么我必须创建一个数据库记录。您是否有任何想法来检查这些可选值是否已填充?
按照惯例,基本数据类型是必需的。您可以使性能可为空这是原始的如int,双,日期主场迎战然后:
PropertyInfo[] infos = yourObjectInstance.GetType().GetProperties();
int count = 0;
for(int i = 0; i < infos.Length; i++)
{
if(infos[i].PropertyType == typeof(string))
{
string stringValue = infos[i].GetValue(yourObjectInstance).ToString().Trim();
if(!string.IsNullOrEmpty(body))
{
count++;
}
continue;
}
if(infos[i].GetValue(yourObjectInstance) != null)
{
count++;
}
}
if(count == 0)
{
// Handle error
}
// Create record
您可以实现此代码,通过您的视图模型,然后计算多少字段不为空,如果返回值> 0,那么你可以实现你的Db工作。
public int MethodToCheckNotNull(ViewModel obj)
{
int i = 0;
PropertyInfo[] properties = typeof(obj).GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.GetValue(obj) != null)
{
i++;
}
}
return i;
}
你是否实施了'INotifyPropertyChanged'? – arcticwhite
@arcticwhite不,我没有实现它。这只是一个简单的检查,我必须做一旦我发布表单到服务器。 – Dario
@arcticwhite它是一个ASP.NET核心应用程序,所以它是基于MVC的。 – Dario