0

我有一个非常简单的用户控件,基本上是一个文本框和一个标签,其目的是在彼此之间切换。该控件在页面的Page_Load event. 在 UserControl 的Page_Load事件中,我调用 Toggle() 函数,该函数显示或隐藏适当的控件,并分别基于布尔 Editable 属性和字符串 Text 属性设置其文本。

这是我的 Toggle() 方法(记住 Editable 和 Text 是公共属性):

Public Sub Toggle()
    If Editable Then
        txtText.Visible = True
        lblText.Visible = False
        txtText.Text = Text
        txtText.CssClass = TextboxCSSClass
    Else
        txtText.Visible = False
        lblText.Visible = True
        lblText.Text = Text
        lblText.CssClass = LabelCSSClass
    End If
End Sub

我的问题也很简单:当页面上的按钮调用控件的 Toggle() 方法时,切换工作正常,但文本消失了!我已经用它旁边的一个普通的未绑定文本框尝试了这个,并且文本框保持它的文本值就好了。有什么我想念的吗?

提前感谢您的帮助。

4

3 回答 3

0

当您将控件的 visible 属性设置为 False 时,它​​将不会以 Html 呈现,因此它不能在页面之间携带状态。而是考虑使用 MultiView 控件

于 2009-03-31T05:04:21.623 回答
0

更新:有关评论的更多信息。

如果您禁用了视图状态,并且为文本框设置了文本,则该文本是输入控件中的文本。当您尝试了解给定文本框的值是否已更改时,这可能会在不常见的情况下影响您。

上面的标签是不同的,因为它不是输入控件。在禁用视图状态的情况下,如果您没有在每个请求上设置文本,它将显示初始值(试试看)。视图状态自动允许在控件的回发中保留信息。

就像它发生在标签上一样,它也发生在你的用户控件上。如果您更改设置器以便直接设置两个控件文本,如果您使用视图状态,它将保留内部控件中的值。如果将其关闭,则标签的行为与文本框的行为不同。

另请注意,关闭视图状态也会影响您的可见配置。我经常关闭视图状态,但您可能有一个场景,您真的希望在回发中保留控件信息。关闭视图状态时,您需要确保始终配置控件,而不仅仅是在 !IsPostBack 时。

请注意,如果您跟踪应该是可见的内容和代码中的文本,那么您可以关闭内部控件的视图状态(假设您没有为它们分配任何其他属性)。


初步答案:

您正在将 Text 属性的当前值分配给标签/文本框。如果您没有在当前请求中设置该值,则它具有其默认值,因此您将获得空文本。

您可以将视图状态中的值保存为(c# 语法):

public string Text
{
   get
   {
      return (string) ViewState["MyText"];
   }
   set
   {
      ViewState["MyText"] = value;
   }
}

附言。这不是唯一的方法。如果切换没有设置文本,但是您在设置器上对两个控件进行了设置,那么它们将保留这些值(只要您在跟踪视图状态后分配用户控件的 Text 属性,就像在页面加载)。

于 2009-03-31T15:45:49.193 回答
0

我想到了!我为自己愚蠢而道歉。这就是我做错的事情:我的文本属性的获取/设置被存储在一个私有成员中。这意味着当对文本进行更新时,它不知道,因为它没有连接到文本框。相反,我做了以下事情:

Public Property Text() As String
    Get
        Return txtText.Text
    End Get
    Set(ByVal value As String)
        txtText.Text = value
    End Set
End Property

在我的 Page_Load 事件中:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        lblText.Text = Text
        Toggle()
    End If
End Sub

现在它工作正常!感谢那些让我走上正确道路的人!:)

于 2009-03-31T17:51:52.620 回答