2011-12-15 63 views
0

我爲Sitefinity網站的後端設置了一個小部件,該站點有三個文本框和一個按鈕。我們的目標是在數據庫中創建新列:爲什麼Type.GetType在sitefinity中使用telerik類型返回null?

protected void btnAddClick(object sender, EventArgs e) 
    { 
     Type TelerikType = Type.GetType(txtTelType.Text); 
     Type ColumnType = Type.GetType(txtColType.Text); 
     string error = ""; 
     if (TelerikType == null) 
     { 
      error = "Telerik Type is invalid"; 
     } 
     if (ColumnType == null) 
     { 
      error = "Column Type is invalid"; 
     } 
     if (error.Length == 0) 
     { 
      App.WorkWith() 
       .DynamicData() 
       .Type(TelerikType) 
       .Field() 
        .TryCreateNew(txtName.Text, ColumnType) 
        .SaveChanges(true); 
      error = "Added column successfully"; 
      txtColType.Text = txtName.Text = txtTelType.Text = ""; 
     } 
     literalErrorText.Text = string.Format(literalErrorText.Text, error); 

    } 

我有兩個問題:

  1. 當我進入Telerik.Sitefinity.Pages.Model.PageNode到文本框中,鍵入。 GetType(txtTelType.Text)返回null。

  2. 如果我用typeof(PageNode)替換那部分,我得到「指定類型'Telerik.Sitefinity.Pages.Model.PageNode'不是動態類型。」

我希望有人可能會有一些洞見,爲什麼這些事情不會正常工作,或者可能更好的方法來解決這個問題?作爲參考,我的目標(至少現在)是添加一個引用PageNode的動態列,以便我可以指定一個ShowInLeftNavigation布爾值和一個ShowInRightNavigation布爾值。感謝您提供任何幫助。

+0

問題是否您正在檢查的Telerik控件解析爲字符串..?如果是這樣,你可以做if語句if(TelerikType == string.isEmptyOrNull)..? – MethodMan 2011-12-15 19:56:26

+0

最好使用Equals關鍵字檢查對象,並在檢查int a = 5時檢查對象; b int = 6如果您想檢查值或值類型是否等於某個使用「==」的值,則返回值爲 – MethodMan 2011-12-15 20:02:11

+0

TelerikType的類型爲Type。另外,如果我嘗試使用帶有空對象的.Equals,我不會得到空引用異常嗎? – 2011-12-15 20:09:01

回答

2

代替= NULL仔細閱讀here文檔:

的typeName類型:System 彙編合格的名稱的類型 得到。見AssemblyQualifiedName。如果該類型位於當前執行程序集 或Mscorlib.dll中,則提供按其名稱空間限定的 類型名稱就足夠了。

因此,如果類型不是基本的.Net類型之一,或者在當前正在執行的程序集中,則必須告訴GetType要查找的程序集。 我不知道Telerik的控制在什麼組件,但它看起來像你必須將程序集添加到類型名稱,一些臨客這樣的:

TopNamespace.SubNameSpace.ContainingClass,MyAssembly程序, 版本= 1.3.0.0,Culture = neutral,PublicKeyToken = b17a5c561934e089

請按照上面的「AssemblyQualifiedName」鏈接獲取語法的所有細節。

0
Type.GetType doesn't that check for Object type 

例如System.String等...你可以嘗試用

if (TelerikType.Equals(null))