Поставлен в тупик с пользовательским свойством в пользовательском контроле - PullRequest
2 голосов
/ 29 декабря 2011

Я создал пользовательский контроль 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: не могу инициализировать свойство пользовательского элемента управления, используя Eval ("...")

Однако, исходя из моего понимания поста, я должен работать.

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Проблема в том, что привязка данных не происходит в вашем просмотре формы до тех пор, пока не будет завершено Page.Load, и вы проверяете значение свойства в течение этого времени.Если вы хотите, чтобы значение было установлено в Page.Load, вам необходимо вручную связать, используя FormView.Databind().

. В качестве альтернативы вы можете изменить код, указанный в вашем пользовательском элементе управления, с обработки Page.Load на обработку Page.Выполните предварительную визуализацию, если ничто не требует, чтобы этот код выполнялся раньше.

1 голос
/ 29 декабря 2011

Похоже, что проблема может быть связана с синхронизацией / событием.

Когда вы устанавливаете свойство с помощью <%# %>, значение присваивается свойству во время события привязки данных элемента управления.Если вы ищете его в Page_Load() время, оно еще не будет там.

Если вы измените свой код, чтобы проверить значение в событии PreRender, оно должно быть там.

1 голос
/ 29 декабря 2011

Вам необходимо использовать ViewState для сохранения DateValue между запросами страницы.

Public Property DateValue() As String 
   Get 
        IF IsNothing(ViewState("datevalue") Then
           return String.Empty
        End If
        return ViewState("datevalue").ToString()
   End Get 
   Set(ByVal value As String) 
       ViewState("datevalue")=value
   End Set 
End Property 

Или сохранить значение непосредственно в элементах управления:

 Public Property DateValue() As String 
    Get 
          Return LabelSelectedDateDisplay.Text
    End Get 
    Set(ByVal value As String) 
      If IsDate(value) Then 
            Dim NewDate As DateTime = CDate(value) 
            LabelSelectedDateDisplay.Text = NewDate 
            LabelSelectedDateDisplay_DayOfWeek.Text = NewDate.ToString("dddd") 
            TextBoxSelectedDate.Text = NewDate 
        Else 
            LabelSelectedDateDisplay.Text = "" 
            LabelSelectedDateDisplay_DayOfWeek.Text = "" 
            TextBoxSelectedDate.Text = "" 
        End If          
    End Set 
End Property 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...