views:

61

answers:

3

I am trying to use a property from the code-behind to populate a textbox instead of using in the code-behind textbox.text=. I am using vb.net. Here is the code for the aspx page:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
    <asp:TextBox runat="server" ID="roleTextBox" Text='<%# CurrentRole.Name%>'></asp:TextBox>
</asp:Content>

Here is the code behind code:

Imports Compass.UI.components
Imports Compass.Core.Domain
Imports Compass.Core.Domain.Model

Namespace app.administration.Roles
    Partial Public Class edit
        Inherits ClaimUnlockPage

        Private _roleRepository As IRoleRepository
        Private _roleId As Integer
        Private _role As Role

        Public Property CurrentRole() As Role
            Get
                Return _role
            End Get
            Set(ByVal value As Role)
                _role = value
            End Set
        End Property

        Public Property RoleRepository() As IRoleRepository
            Get
                Return _roleRepository
            End Get
            Set(ByVal value As IRoleRepository)
                _roleRepository = value
            End Set
        End Property

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            LoadRole()

        End Sub

        Private Sub LoadRole()
            _roleId = Config.RequestVal("id", Request) 
            _role = _roleRepository.GetById(_roleId)
        End Sub
    End Class
End Namespace

When I run the page the text box is empty.

A: 

I didn't see roleTextBox.text=value in your code! in LoadRole or anywhere.
And if you try to bind it, you need a static class for Role.

Just for testing try to add the following line in LoadRole

    Private Sub LoadRole()
      _roleId = Config.RequestVal("id", Request) 
      _role = _roleRepository.GetById(_roleId)
      roleTextBox.text =CrrentRole.Name;
    End Sub 

if the roleTextBox is still empty then the CurrentRole.Name is empty.

Waleed A.K.
A: 

As far as I know you can't bind a property of a control like this (I wish you could but I've never been able to figure out or find an example how to). The way I've always done it is create a protected function to return e.g.

Protected Function GetCurrentRoleName() As String
    Return CurrentRole.Name
End Function

And in your markup bind like so

Text='<%# GetCurrentRoleName() %>'
Dustin Hodges
A: 

You have to DataBind the container-control which contains your Textbox(f.e. a GridView,UserControl,etc.). So at least your aspx-page must be databound. "When called on a server control, this method resolves all data-binding expressions in the server control and in any of its child controls."

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.CurrentRole = New Role("Administrator")
        Me.DataBind() '!!!!!!!
    End Sub

    Private _currentRole As Role

    Protected Property CurrentRole() As Role
        Get
            Return _currentRole
        End Get
        Set(ByVal value As Role)
            _currentRole = value
        End Set
    End Property

  Public Class Role
    Public Sub New(ByVal name As String)
        Me.Name = name
    End Sub
    Public Name As String
  End Class

Then you can use your aspx-code to set the TextBox'-text property.

Tim Schmelter