Ошибка веб-части: невозможно отобразить или импортировать веб-часть или элемент управления веб-формы на этой странице - PullRequest
0 голосов
/ 10 февраля 2011

Ошибка: веб-часть или элемент управления веб-формы на этой странице не могут быть отображены или импортированы. Тип не найден или не зарегистрирован как безопасный.

Эта ошибка появляется после того, как я добавил в свой веб-сайт несколько объектов. Когда я удалил свойство, веб-часть работает, но когда я добавил его обратно, появилась ошибка.

Вот свойство, которое я добавил в свой код.

    /// <summary>
    /// Property that contains the maximum number of answers allowed in the question
    /// </summary>
    /// <value>The number of answers allowed</value>

    const int default_intPollMaxAnswers = 2;
    private int intPollMaxAnswer = default_intPollMaxAnswers;
    [WebBrowsable(true)]
    [WebDisplayName("Maximum No. of Answers")]
    [WebDescription("Total no. of answers")]
    [Category("Poll settings")]
    [Personalizable(PersonalizationScope.Shared)]
    [DefaultValue(default_intPollMaxAnswers)]
    public int SPUserPollMaxAnswer
    {
        get { return intPollMaxAnswer; }
        set { intPollMaxAnswer = value; }
    }

Это метод, при котором я использовал свою собственность .. хотя я уверен, что это не влияет на мою веб-часть, потому что я прокомментировал этот метод в данный момент ...

    private void InsertPollModalDialogForm()
    {
        this.Controls.Add(new LiteralControl(@"<div id=""divPollDialogForm"" title=""User Poll"" style=""font-size:8pt; display:none;"">"));
        this.Controls.Add(new LiteralControl(@"<table border=""0"" style=""width: 345px; height: 73px"">"));
        this.Controls.Add(new LiteralControl(@"<tr>"));
        this.Controls.Add(new LiteralControl(@"<td style=""width: 122px"">Poll title </td>"));
        this.Controls.Add(new LiteralControl(@"<td><textarea title=""What is your poll question?"" class=""text ui-widget-content ui-corner-all""  style=""width:100%;"" id=""txtPollQuestion"" rows=""2"" cols=""4""/></td>"));
        this.Controls.Add(new LiteralControl(@"</tr>"));
        for (int intCountAnswers = 1; intCountAnswers < intPollMaxAnswer; intCountAnswers++)
        {
            this.Controls.Add(new LiteralControl(@"<tr>"));
            this.Controls.Add(new LiteralControl(@"<td style=""width: 122px; height: 43px"" valign=""top"">Answer </td>"));
            this.Controls.Add(new LiteralControl(
                    string.Format(@"<td style=""height: 43px""><input type=""text"" 
                                    class=""clsAnswers"" id=""txtAnswer{0}"" 
                                    style=""width:200px""/></td>",
                                    intCountAnswers
            )));
            this.Controls.Add(new LiteralControl(@"</tr>"));
        }
        this.Controls.Add(new LiteralControl(@"<tr><td colspan=""2""><br /></td></tr>"));
        this.Controls.Add(new LiteralControl(@"</table>"));
        this.Controls.Add(new LiteralControl(@"</div>"));
    }

Ниже приведен захваченный экран страницы с ошибкой.

enter image description here

Я надеюсь, что кто-нибудь может помочь мне решить мою проблему. Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 11 февраля 2011

Я думаю, что Фуркан на правильном пути. Каково пространство имен вашего элемента управления и как выглядит элемент Assembly в вашем manifest.xml? Вот как должен выглядеть элемент Assembly:

<Assembly Location="MyProject.dll" DeploymentTarget="GlobalAssemblyCache">
  <SafeControls>
    <SafeControl 
        Assembly="MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0000000000000000" 
        Namespace="MyProject.UI.WebControls.WebParts" 
        TypeName="*" 
        Safe="True" />
  </SafeControls>
</Assembly>

Пространство имен в элементе SafeControl должно соответствовать пространству имен вашей веб-части. Вы можете использовать Reflector , чтобы получить четыре части имени вашей DLL.

Если все это правильно, то отображаемая ошибка отправляет вас по неверному пути. Попробуйте открыть веб-часть в Галерее веб-частей и / или проверить журналы SharePoint для получения более полной информации об ошибках.

0 голосов
/ 03 марта 2011

Я понял, что эта проблема как-то связана с wspbuilder, но я не совсем уверен в этом. Я просто сталкиваюсь с такого рода ошибками большую часть времени, когда я перестраиваю проект и делаю копию в GAC. Я обнаружил, что если я пересоберу проект, затем нажму на копию в gac и нажму на утилизацию пулов приложений ... дважды или трижды, эта ошибка исчезнет, ​​и я смогу вернуться к работе. Так раздражает, но как-то это работает для меня. :)

0 голосов
/ 11 февраля 2011

попробуйте использовать следующий код

    const int default_intPollMaxAnswers = 2;
    private int intPollMaxAnswer = default_intPollMaxAnswers; 

    [Personalizable(PersonalizationScope.Shared),
    WebBrowsable(true),
    FriendlyNameAttribute("Connection String"),
    SPWebCategoryName("Custom Properties")]  
    public int SPUserPollMaxAnswer
    {
        get { return intPollMaxAnswer; }
        set { intPollMaxAnswer = value; }
    }
0 голосов
/ 10 февраля 2011

Что произойдет, если вы переименуете свою собственность в то, что не содержит "SPUser"?

...