Почему Type.GetType возвращает null с типами telerik в sitefinity?
Я создал виджет для бэкенда моего сайта 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. Спасибо за любую помощь, которую вы можете предоставить.
2 ответа
Внимательно прочитайте документы здесь:
typeName Тип: System.String Завершенное сборкой имя типа для получения. См. AssemblyQualifiedName. Если тип находится в текущей выполняющейся сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен.
Поэтому, если тип не является одним из базовых типов.Net или в текущей выполняемой сборке, вы должны указать GetType, какую сборку также следует искать. Я не знаю, в какой сборке находится элемент управления Telerik, но похоже, что вам придется добавить сборку к имени типа, что-то вроде этого:
TopNamespace.SubNameSpace.ConistingClass, MyAssembly, версия =1.3.0.0, культура = нейтральная, PublicKeyToken=b17a5c561934e089
Перейдите по ссылке "AssemblyQualifiedName" выше, чтобы получить все подробности синтаксиса.
Type.GetType doesn't that check for Object type
например, System.String и т. д. Вы можете попробовать заменить = нуль на
if (TelerikType.Equals(null))