0

我为我的 Sitefinity 网站的后端设置了一个小部件,该小部件具有三个文本框和一个按钮。目标是在数据库中创建一个新列:

    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 时,Type.GetType(txtTelType.Text) 返回 null。

  2. 如果我用 typeof(PageNode) 替换该部分,我会得到“指定类型'Telerik.Sitefinity.Pages.Model.PageNode'不是动态类型。”

我希望有人可能对为什么这些事情不能正常工作有所了解,或者可能是解决这个问题的更好方法?作为参考,我的目标(至少现在)是添加一个引用 PageNode 的动态列,以便我可以指定 ShowInLeftNavigation 布尔值和 ShowInRightNavigation 布尔值。感谢您提供任何帮助。

4

2 回答 2

2

在这里仔细阅读文档:

typeName 类型:System.String 要获取的类型的程序集限定名称。请参阅AssemblyQualifiedName。如果该类型在当前执行的程序集中或在 Mscorlib.dll 中,则提供由其命名空间限定的类型名称就足够了。

因此,如果该类型不是基本 .Net 类型之一,或者在当前执行的程序集中,您还必须告诉 GetType 要查看的程序集。我不知道 Telerik 控件在哪个程序集中,但看起来您必须将程序集添加到类型名称中,链接如下:

TopNamespace.SubNameSpace.ContainingClass,MyAssembly,版本=1.3.0.0,文化=中性,PublicKeyToken=b17a5c561934e089

按照上面的“AssemblyQualifiedName”链接获取语法的所有细节。

于 2011-12-15T23:20:37.677 回答
0
 Type.GetType doesn't that check for Object type  

例如 System.String 等...您可以尝试将 = null 替换为

if (TelerikType.Equals(null)) 
于 2011-12-15T19:59:16.317 回答