2011-03-23 38 views
0

我在我的webconfig中定義了一個自定義配置文件。我已定義此屬性配置文件提供程序中布爾類型的默認值爲空

<add name="sex" type="bool" serializeAs="String" defaultValue="[null]"/> 

由於數據庫中存在空值,我在此代碼得到一個空引用異常:

ProfileCommon p = GetProfile(); 
      txtFirstName.Text = p.first_name; 
      txtLastName.Text = p.last_name; 
      txtInitial.Text = p.initial; 
      txtEmail.Text = p.email; 

//這會導致空引用異常 布爾? blnTest = p.sex;

這是在webconfig中設置默認空值的正確方法嗎?

+0

也許你想''布爾讓'null'是一個有效的價值? – 2011-03-23 16:09:45

+0

試過。布爾?不被認可。一旦配置文件初始化,它將拋出異常。 – FiveTools 2011-03-23 16:39:56

+0

問題仍然存在 - 你需要一個合適的數據類型,'bool'不是,因爲它只能保存'true/false',你需要更多的狀態。 – 2011-03-23 17:58:41

回答

1

這裏的問題是profile屬性的默認類型是bool,它不是一個可爲空的類型。它將始終默認爲false。

你總是可以創建一個自定義類來封裝Sex/Gender並使用它來代替bool。這樣,當沒有設置值時,類將嘗試實例化並根據需要恢復爲空。

更改web配置:

<profile defaultProvider="MyProfileProvider" inherits="FTS.Membership.Profile.MyProfileProvider,FTS.Membership"> 
     <providers> 
     <clear/> 
     <add name="MyProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="FTS.Membership.Profile.MyProfileProvider,FTS.Membership"/> 
     </providers> 
     <properties> 
     <add name="first_name" type="string" serializeAs="String" defaultValue=""/> 
     <add name="last_name" type="string" serializeAs="String" defaultValue=""/> 
     <add name="initial" type="string" serializeAs="String" defaultValue=""/> 
     <add name="email" type="string" serializeAs="String"/> 
     <add name="active" type="bool" serializeAs="String" defaultValue="false"/> 
     <add name="creation_date" type="datetime" serializeAs="String"/> 
     <add name="update_date" type="datetime" serializeAs="String"/> 
     <add name="last_activity_date" type="datetime" serializeAs="String"/> 
     <!--<add name="sex" type="bool" serializeAs="String" defaultValue="false"/>--> 

     </properties> 
    </profile> 

和類:

using System; 
using System.Web.Profile; 
using System.Collections.Generic; 

namespace FTS.Membership.Profile 
{ 
    public class MyProfileProvider : ProfileBase 
    { 
     public bool? sex 
     { 
      get { 
       if (base["sex"] == null) 
       { 
        return null; 
       } 
       return (bool)base["sex"]; 
      } 
      set { base["sex"] = value; } 
     } 
    } 
} 
+0

爲您的答案添加了一些代碼,以便其他人可能需要修復的好處。 – FiveTools 2011-03-25 17:47:12

相關問題