2017-10-16 77 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; 
} 
相關問題