【问题标题】:Setting a design-time property from the properties window of a custom web server control hangs/crashes Visual Studio 2010从自定义 Web 服务器控件的属性窗口设置设计时属性挂起/崩溃 Visual Studio 2010
【发布时间】:2011-11-09 16:08:05
【问题描述】:

正如我的标题所说,我有一个设置属性崩溃问题。

这是场景:

  1. 我创建了一个简单的自定义 ASP.Net 服务器控件,可以生成一些文本。
  2. 我想为该文本提供设计时属性,以便开发人员可以从属性窗口访问其样式。
  3. 除了我创建的 System.Web.UI.WebControls.Style 类型的属性之外,属性窗口中的所有属性都可以正常工作。

这是我的财产:

[Bindable(true)]
[Category("Appearance")]
[Description("The style for the header")]
[Localizable(true)]
public Style HeaderTextStyle
{
  get
  {
    Style s = (Style)(ViewState["HeaderTextStyle"] == null ? Styles.defaultHeaderStyle : ViewState["HeaderTextStyle"]);
    return s;
  }

  set
  {
    ViewState["HeaderTextStyle"] = value;
  }
}

哦,Styles.defaultHeaderStyle 只是一个来自内部类的属性,它返回一个新的Style

让我指出,仅当我更改属性时才会发生挂起/崩溃,因此它不能来自 getter。

我不会粘贴我的渲染控件,因为即使我没有渲染任何东西也会发生错误。

这是什么原因造成的?

谢谢。

【问题讨论】:

  • Styles.defaultHeaderStyle 返回什么?
  • @rickschott 它返回一个样式。public static Style defaultHeaderStyle { get { Style result = new Style(); result.Font.Bold = true; return result; } }
  • 我找到了解决方案。我会发布解释。

标签: asp.net visual-studio-2010 styles custom-server-controls design-time


【解决方案1】:

我找到了问题的答案。

你看,Style类是一个有子属性的属性,它被称为复杂属性复杂属性(具有子属性的属性)需要自定义状态管理才能使用视图状态。 Style 类需要设计时属性来启用控件标签内的持久性。所以我在原始帖子中写的内容将不起作用。

完整解释请访问:Server Control Properties Example from MSDN

我设法使用那个例子来实现它。我希望这对其他人有用。

【讨论】:

  • 在这种情况下,您能否将帖子标记为“答案”,以便有人更容易访问包含解决方案的这个问题?
  • 好的,我做到了。我到现在都做不到,因为 stackoverflow 一直告诉我必须等待 24 小时才能将我的答案标记为答案。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多