我为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);
}
我遇到两个问题:
当我将Telerik.Sitefinity.Pages.Model.PageNode输入文本框时,Type.GetType(txtTelType.Text)将返回null。
如果我用typeof(PageNode)替换该部分,我会得到“指定类型”Telerik.Sitefinity.Pages.Model.PageNode'不是动态类型。“
我希望有人可能会对这些事情为什么不能正常工作有所了解,或者可能是解决这个问题的更好方法?作为参考,我的目标(至少现在)是添加一个引用PageNode的动态列,以便我可以指定ShowInLeftNavigation布尔值和ShowInRightNavigation布尔值。感谢您提供任何帮助。
答案 0 :(得分:2)
仔细阅读文档here:
typeName类型:System.String 该类型的程序集限定名称 要得到。见AssemblyQualifiedName。如果类型在当前 执行程序集或在Mscorlib.dll中,它足以提供 类型名称由其命名空间限定。
因此,如果类型不是基本的.Net类型之一,或者在当前正在执行的程序集中,您必须告诉GetType要查看的程序集。 我不知道Telerik控件所在的程序集,但看起来你必须将程序集添加到类型名称中,这样就可以了:
TopNamespace.SubNameSpace.ContainingClass,MyAssembly, Version = 1.3.0.0,Culture = neutral,PublicKeyToken = b17a5c561934e089
按照上面“AssemblyQualifiedName”的链接获取语法的所有详细信息。
答案 1 :(得分:0)
Type.GetType doesn't that check for Object type
例如System.String等...你可以尝试用
替换= nullif (TelerikType.Equals(null))