1

环境:Asp.net 4.5,Webforms

我正在创建一个复合控件。我已经公开了多个公共属性,但遇到了一个小问题。

假设我有两个属性:

Public Property Path() As String
   Get
       Return ViewState("Path")
   End Get
   Set(ByVal Value As String)
       If UseAbsolute = True Then
           ' do something
       Else
           ' it always lands heere...
       End If
   End If
   ViewState("Path") = Value
   End Set
End Property
Private _Path As String = String.Empty

Public Property UseAbsolute() As Boolean
    ....
End Property
Private _UseAbsolute As Boolean = False

我的控件在 PreRender 上被赋值。问题是,当我调用“路径”时,它会获取 UseAbsolute 的默认/私有值。因此,即使我在控件/html 中将属性设置为 True,它也会先获取 false。

我可以通过多种方式解决这个问题,但我觉得我缺少正确的方法或理解。

更新

我忘了提。我是:

EnsureChildControls()

在预渲染...

我还尝试将其添加到属性本身。

4

1 回答 1

0

你的代码不应该是这样的,而不是你如何拥有它吗?

Private _Path As String = String.Empty
Private _UseAbsolute As Boolean = False
'
Public Property Path() As String
  Get
    Return _Path
  End Get
  Set(ByVal Value As String)
    If UseAbsolute = True Then
      ' do something
      _Path = some_absolute_path
    Else
      ' do something else
      _Path = some_relative_path
    End If
  End Set
End Property
'
Public Property UseAbsolute () As Boolean
  Get
    Return _UseAbsolute
  End Get
  Set(ByVal Value As Boolean)
    _UseAbsolute = Value
  End Set
End Property
于 2015-06-24T01:20:33.553 回答