【问题标题】:ImageUrl on Custom Control Design Time自定义控件设计时的 ImageUrl
【发布时间】:2010-06-07 15:13:08
【问题描述】:

我已经构建了一个带有 ImageURL 属性的自定义控件。在设计时,当我在 ImageUrl 中输入图像时,我收到以下错误消息

创建控件时出错 - 无法在属性“ImageUrl”上设置 AmazeDropDownList1'~/Image/help.png'。

<myCompany:MyCompanyDropDownList ID="AmazeDropDownList1" runat="server" ImageUrl="~/Image/help.png">
</myCompany:MyCompanyDropDownList> 

我的控件的代码如下所示:

    [DefaultValue("")]
    [Editor("System.Web.UI.Design.ImageUrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    [Description("Image_ImageUrl")]
    [Bindable(true)]
    [Category("Appearance")]
    [UrlProperty]
    public virtual string ImageUrl
    {
        get
        {
            string str = (string)this.ViewState["ImageUrl"];
            if (str != null)
            {
                return str;
            }
            return string.Empty;
        }
        set
        {
            this.ViewState["ImageUrl"] = value;
        }
    }

我继承自 TextBox,下面是我的渲染方法:

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        // Call the base class's Render method.
        base.Render(writer);

        if (!string.IsNullOrEmpty(this.ImageUrl))
        {
            // Create and render a new Image Web control.
            System.Web.UI.WebControls.Image image = new System.Web.UI.WebControls.Image();
            image.ID = "Image1";
            image.ImageUrl = ImageUrl;
            image.AlternateText = ImageAltText;
            image.RenderControl(writer);
        }
    }

对于修复错误消息的任何帮助,我将不胜感激。

【问题讨论】:

  • 我看到你从 Reflector 中“被拉”了出来。 :O)
  • 你是否适当地实现了RenderContentsAddAttributesToRender方法?
  • 你使用的是什么版本的视觉工作室?
  • 2008 我有一个渲染方法我有一个 RenderContents 或 AddAttributesToRender 因为我从 TextBox 继承
  • 听起来很像我在 2005 版中使用 Visual Studio 缓存时遇到的错误。请在下面尝试我的答案。

标签: asp.net webforms custom-controls


【解决方案1】:

我想知道 Visual Studios 是否使用了错误缓存的控件版本?

您可以尝试自己清除缓存。指令here.

或者,您可以尝试从工具箱中删除控件(如果有),从页面中删除所有控件引用(即&lt;%@ Register... 标记),重新构建所有控件,然后重新添加控件。

最终猜测,在 Web.config 中引用控件而不是在页面上:

<system.web>
 <controls>
  <add tagPrefix="my" namespace="myCompany.Controls" 
            assembly="myCompany.Controls"/>
 </controls>
</system.web>

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2012-05-21
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多