私は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はそれで価値を持っていることを確認しました。理由が何であれ、値はコントロールに渡されませんが、コントロールはリテラル値を認識します。私はこのURL ASP.NET User Control : can't initialize a user control property using Eval("...")
でポストに参照された
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
しかし、ポストの私の理解に基づいて、私が持っていることは働くべきです。
最初のステートメントがtrueであるとは思いませんが、カスタムコントロールとそのプロパティのデフォルトではViewStateは有効になっていませんか?私はUserControlのメンバーのプロパティは、(フォームビューのバインディング時に)バインディング式を介してプロパティが設定されるたびに設定されるので、私は思うが、私は思うが、これが共通のコードパターンであるかどうかはわかりません。それは私にはちょっと変わった感じがします。 – pseudocoder
@擬似コード - このWebユーザーコントロールでは、カスタムプロパティの値をViewStateに明示的に設定する必要があります。要求ごとに、DateValueプロパティはOPコードのPage_Loadで検査されます。重要なのは、Page_LoadイベントがDateValue割り当ての前に呼び出されていることです。これが私が2番目のメソッドを提案した理由です。 – adatapost
「Page_Load()」というサブクラスの命名は、技術的には読み込まれているユーザーコントロールであるため、誤解を招きます。私はそれを分かりやすくするために変更する予定です。コントロールは実際には値そのものに作用しません。これは、(このバージョンでは)日付を取得するために必要な労力を最小限に抑えるために組み合わせたコントロールの集合です。 –