Почему 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);

    }

У меня две проблемы:

  1. Когда я ввожу Telerik.Sitefinity.Pages.Model.PageNode в текстовое поле, Type.GetType(txtTelType.Text) возвращает значение NULL.

  2. Если я заменю эту часть на 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)) 
Другие вопросы по тегам