Почему Type.GetType возвращает null с типами telerik в sitefinity? - PullRequest
0 голосов
/ 15 декабря 2011

Я настроил виджет для бэкенда моего сайта 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) возвращает ноль.

  2. Если я заменю эту часть на typeof (PageNode), я получу «Указанный тип 'Telerik.Sitefinity.Pages.Model.PageNode' не является динамическим типом."

Я надеюсь, что кто-то может иметь некоторое представление о том, почему эти вещи не будут работать правильно, или, возможно, лучший способ подойти к этой проблеме? Для справки, моя цель (по крайней мере пока) состоит в том, чтобы добавить динамический столбец, который ссылается на PageNode, чтобы я мог указать логическое значение ShowInLeftNavigation и логическое значение ShowInRightNavigation. Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Внимательно прочитайте документы здесь :

typeName Тип: System.String полное имя сборки типа для получения.См. AssemblyQualifiedName .Если тип находится в текущей выполняющейся сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен.

Так что, если тип не является одним из базовых типов .Netили в текущей выполняющейся сборке вы должны указать GetType, какую сборку также следует искать.Я не знаю, в какой сборке находится элемент управления Telerik, но, похоже, вам придется добавить сборку к имени типа, что-то вроде этого:

TopNamespace.SubNameSpace.ContainedClass, MyAssembly,Версия = 1.3.0.0, Культура = нейтральная, PublicKeyToken = b17a5c561934e089

Перейдите по ссылке для «AssemblyQualifiedName» выше, чтобы получить все подробности синтаксиса.

0 голосов
/ 15 декабря 2011
 Type.GetType doesn't that check for Object type  

например System.String и т. Д. Вы можете попробовать заменить = null на

if (TelerikType.Equals(null)) 
...