2017-10-16 115 views
0

我有一个ViewModel,其中包含的属性可以可选从我的Web应用程序的用户填充(例如名字,姓氏,电子邮件,日期出生等)。这些属性包括几个类型,如字符串,布尔型int,小数点,双精度型,DateTime。所有这些类型在ViewModel中都可以为空或不可空。如何检查ViewModel的任何属性是否已填充

如果这些属性中至少有一个已被填充,那么我必须创建一个数据库记录。您是否有任何想法来检查这些可选值是否已填充?

+0

你是否实施了'INotifyPropertyChanged'? – arcticwhite

+0

@arcticwhite不,我没有实现它。这只是一个简单的检查,我必须做一旦我发布表单到服务器。 – Dario

+0

@arcticwhite它是一个ASP.NET核心应用程序,所以它是基于MVC的。 – Dario

回答

0

按照惯例,基本数据类型是必需的。您可以使性能可为空这是原始的如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

我现在试过了,但是针对空的字符串检查不能正常工作。我的目标是空字符串也被认为是空的(或者更确切地说被认为是没有填充的) – Dario

+0

我已经更新了答案,你能再试一次吗? – Orhun

+0

检查if(infos [i] .Name ==“YourStringPropertyName”)的目的是什么?我没有看到任何需要检查/比较迄今为止的财产的名称。 – Dario

0

您可以实现此代码,通过您的视图模型,然后计算多少字段不为空,如果返回值> 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; 
} 
相关问题