我創建了ASP.NET用戶控件。當我明確地提供自定義屬性的值時,該值將傳遞給控件。但是,當我嘗試使用數據源中的值時,該值不會傳遞給控件。在用戶控制上拋棄自定義屬性
用戶控件位於FormView中。 FormView成功顯示底層記錄。我試圖從FormView的數據源向列控件傳遞一個值。這工作
<asp:formview .... />
<editTemplate>
<uctrl:DateSelector ID="DateSelector1" runat="server" DateValue="5/30/2011" /><br />
<%#Eval("MilestoneDate")%>
</editTemplate>
</asp:formview>
這不......
<asp:formview .... />
<editTemplate>
<uctrl:DateSelector ID="DateSelector1" runat="server" DateValue='<%#Eval("MilestoneDate")%>' /><br />
<%#Eval("MilestoneDate")%>
</editTemplate>
</asp:formview>
我已經證實,MileStoneDate確實有它的價值。無論出於何種原因,該值不會傳遞給控件,但控件確實會識別文字值。
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.ComponentModel
Partial Class content_WebUserControl
Inherits System.Web.UI.UserControl
<Bindable(True, BindingDirection.OneWay)>
Public Property DateValue() As String
Get
Return _DateValue
End Get
Set(ByVal value As String)
_DateValue = value
End Set
End Property
Private _DateValue As String
Protected Sub Page_Load() Handles Me.Load
If IsDate(Me.DateValue) Then
Dim NewDate As DateTime = CDate(Me.DateValue)
LabelSelectedDateDisplay.Text = Me.DateValue
LabelSelectedDateDisplay_DayOfWeek.Text = NewDate.ToString("dddd")
TextBoxSelectedDate.Text = Me.DateValue
Else
LabelSelectedDateDisplay.Text = ""
LabelSelectedDateDisplay_DayOfWeek.Text = ""
TextBoxSelectedDate.Text = ""
End If
End Sub
End Class
我在這個網址ASP.NET User Control : can't initialize a user control property using Eval("...")
但是,根據我的職位的理解refered到了後,我有什麼應該是工作。
我不認爲你的第一個陳述是真實的,是不是默認啓用ViewState的自定義控件及其屬性?我認爲第二種解決方案是可行的,因爲無論何時通過綁定表達式(在formview綁定時間)設置屬性,都會設置UserControl的成員屬性,但我不確定這是否是常見的代碼模式。我感覺有點奇怪。 – pseudocoder 2011-12-29 15:09:40
@pseudocoder - 此Web用戶控件,您必須顯式地將值設置爲ViewState才能定製屬性。在每個請求中,在OP代碼的Page_Load中檢查DateValue屬性。重要的一點是,Page_Load事件在DateValue賦值之前被調用,這就是我提出第二種方法的原因。 – adatapost 2011-12-29 16:15:52
命名subPage「Page_Load()」是一個誤用,因爲它在技術上是一個正在加載的用戶控件。爲了清晰起見,我會改變這一點。該控制實際上並沒有對價值本身起作用。它是一個組合在一起的控件集合,以最大限度地減少捕獲日期所需的工作量(在此版本中)。 – 2011-12-29 18:38:58