【问题标题】:ASP.NET server control property issue(?)ASP.NET 服务器控件属性问题(?)
【发布时间】:2009-02-17 17:05:39
【问题描述】:

我正在处理一些 ASP.NET 服务器控件,但我遇到了一个问题。 也许我监督一些事情,我不知道。

无论如何:

public string Name
{
    get
    {
        String s = (String)ViewState["name"];
        return ((s == null) ? String.Empty : s);
    }

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



protected override void RenderContents(HtmlTextWriter output)
{
    txt.ID = Name; // Name here exists
    txt.Text = DateTime.Now.ToShortDateString();

    txt.RenderControl(output);

    output.Write(someName(someValue));

}

public string GetCalendarString(string date)
{
    some code...
    // Name property is null
}

'RenderContents' 使用属性 'Name' 来设置控件名称,然后调用 'someName' 函数和 'someName' 函数也使用属性 'Name',但是当我运行它时,函数 'someName' 中的属性 'Name'是空的,尽管在“RenderContents”中不是。

Gremlins,还是我错过了什么?

【问题讨论】:

  • 你有完整的例子吗?
  • 因此隔离相关的位。很有可能在隔离相关位时,您会发现问题。你肯定还没有给我们足够的信息。
  • 虽然,我可以排除函数并发布 RenderContents 和属性。
  • 这可能是渲染/页面生命周期问题。您需要确保在设置值时查找该值。
  • 我正准备回答 Dave 所说的。幸运的是,我首先阅读了 cmets。戴夫,给他一个指向页面生命周期的链接,因为你是完全正确的。

标签: asp.net controls properties


【解决方案1】:

这将很难回答,因为如果不进行调试,就无法判断是什么外部力量操纵了数据。

由于Name 是公共属性,任何有权访问它的控件都可以在调用GetCalendarString 之前的任何时间将其设置为null。此外,如果您在加载 ViewState 之前调用 GetCalendarString,则此值将不可用。我怀疑您正试图在加载之前从ViewState 获取Name,但这也是一个最好通过调试解决的问题。

顺便说一下 - here is a great image 显示了 ASP.NET 生命周期,它会帮助您确定在从 Request 加载之前是否尝试使用 ViewState

【讨论】:

  • 奇怪。我刚刚调试过它,函数内的 Name 字段不为空。然后我渲染了 Name 属性,它也不为空。不知道发生了什么。无论如何,谢谢大家的帮助和时间。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 2010-10-19
  • 1970-01-01
  • 2012-07-12
  • 2011-03-02
  • 2015-04-16
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多