Возможный загрузить веб-часть в другом?

Попробуйте install.packages("openxlsx").

Зависимости должны быть явно указаны при создании пакета, и это происходит постоянно, когда авторы забывают о них.

11
задан noocyte 16 January 2009 в 12:09
поделиться

4 ответа

public class WebPartWrapper : System.Web.UI.WebControls.WebParts.WebPart {
    protected override void CreateChildControls() {    
        Panel pnl = new Panel();
        this.Controls.Add(pnl);
        var factory = new WebPartFactory()
        WebPart dynamicPart = factory.CreateWebPart("RSSViewer", this.Guid);
        pnl.Controls.Add(dynamicPart);
    }
}

public class WebPartFactory {
    public WebPart CreateWebpart(string webpartName, Guid parentWebPartGuid)
    {
        var config = ConfigurationFactory.LoadConfiguration(webpartName);

        Assembly webPartAssembly = Assembly.Load(config.Assembly);
        Type webPartType = webPartAssembly.GetType(config.Class);
        object actualWebPart = Activator.CreateInstance(webPartType);

        foreach (var item in config.Properties)
        {
            PropertyInfo webPartProperty = webPartType.GetProperty(item.Name);
            object webPartPropertyValue = Convert.ChangeType(itemValue, Type.GetType(item.Type));
            if (!String.IsNullOrEmpty(item.Value))
                webPartProperty.SetValue(actualWebPart, webPartPropertyValue, null);
        }

        RunMethod("set_StorageKeyInternal", actualWebPart, new object[] { parentWebPartGuid });
        return actualWebPart as WebPart;
    }

    private void RunMethod(string methodName, object objectInstance, object[] methodParameters)
    {
        BindingFlags flags = BindingFlags.Instance | BindingFlags.Public |
            BindingFlags.NonPublic;

        Type t = objectInstance.GetType();
        MethodInfo m = GetMethod(t, methodName, flags);
        if (m != null)
        {
            m.Invoke(objectInstance, methodParameters);
        }
    }

    private MethodInfo GetMethod(Type instanceType, string methodName, BindingFlags flags)
    {
        MethodInfo m = instanceType.GetMethod(methodName, flags);
        if (m != null)
        {
            return m;
        }

        if (instanceType.GetType() == typeof(object) || instanceType.BaseType == null)
        {
            return null;
        }

        return GetMethod(instanceType.BaseType, methodName, flags);
    } 
}

Для этого кода нужно некоторое объяснение... Извините меня, если это не компилирует, я должен был удалить немного исходного кода, это была очень реализация определенный материал. Я не показал класс "конфигурации" также, это - просто контейнер для конфигурации webparts, просто набор свойств. Существует 2 вопроса, которые я хотел бы обсудить более подробно:

  1. parentWebPartGuid - Это - Гуид (UniqueId?) хостинга webpart. По некоторым причинам мы должны установить "StorageKeyInternal" на это значение, с помощью отражения (это - частная собственность). Можно возможно сойти с рук не установка его, но по крайней мере для большинства webparts мы должны были установить его.

  2. конфигурация. Свойства - Это - значения конфигурации (мы устанавливаем их в пользовательском .xml файле, но не стесняемся получать это отовсюду). Это может немного походить на это..

В нашей платформе мы также поддерживаем материал как значения динамического свойства и т.д., но это в течение другого дня... Надеюсь, что это все имеет смысл и может помочь кому-то.

4
ответ дан 3 December 2019 в 09:21
поделиться

Я так не думаю. Я попробовал это некоторое время назад, и это жаловалось только на способность добавить объекты WebPartZone в Page Init. Я думаю к тому времени, когда он get's к инициализации Вашего "контейнерного" WebPart, слишком поздно для добавления большего количества зон, поскольку страница содержания была уже инициализирована.

4
ответ дан 3 December 2019 в 09:21
поделиться

Существует (по крайней мере) два способа сделать это: использование iframe элемент HTML или просто отделение, содержание которого изменяется JavaScript (вероятно, с Ajax).

[ПРИМЕЧАНИЕ] Мой ответ, универсально (т.е. на стороне веб-дизайна), я понятия не имею, как это в Вашем техническом контексте, поэтому возможно, я должен удалить этот ответ...

2
ответ дан 3 December 2019 в 09:21
поделиться

Нет никаких шансов получить исходный код для класса WebPartFactory? Или, может быть, еще немного информации об этом? Может быть, псевдокод? Если пользовательская веб-часть находится в галерее, на нее можно ссылаться так же, как и RSSViewer? Я просто не совсем уверен, как делать то, что вы сделали здесь, и мне бы очень хотелось лучше понять, как это сделать.

Спасибо!

2
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: