Программно изменить пользовательские атрибуты пользовательского элемента управления в коде позади - PullRequest
0 голосов
/ 21 января 2012

У меня есть пользовательский элемент управления, который представляет собой форму ввода клиента.

Я работаю над системой продаж, при создании продажи данные клиента заполняются Javascript Auto Complete, но при загрузке сохраненной продажи мне нужно программно вставить идентификатор пользователя в элемент управления.

<controls:customerDataForm ID='customerForm1' partExchangeMenu="true" showBankDetails="false" customerID="****" runat='server' />

Отображает мой элемент управления на странице в разметке родительского документа (в данном случае он называется newSale.aspx)

В коде, указанном в newSale.aspx.vb Мне нужно иметь возможность программно изменить значение атрибута Controls customerID. Я не могу этого сделать.

Это то, что я сделал, следуя различным попыткам поиска в Google, но он всегда оставляет идентификатор клиента равным нулю

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Init
    customerForm1.customerID = "0" '// default Customer ID if no invoice number 
    If Request.QueryString("invno") <> "" Then
        Dim customerID As Integer
        '// open database and get customer ID from the invoice.
        customerForm1.customerID = customerID '// set customerID value
    End If
End Sub

EDIT; просто чтобы вы знали, что если я вручную установлю customerID, я смогу получить доступ к этому атрибуту внутри кода для элемента управления

=========

РЕДАКТИРОВАТЬ, у меня все получилось, добавив элемент Control на страницу в коде за родительской страницей, но это не совсем то, что я хотел. Вот что я сейчас делаю. ЕДИНСТВЕННОЕ различие заключается в заполнении элемента управления и добавлении его в код.

Родительская страница выглядит так:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" CodeFile="newSale.aspx.vb" Inherits="newSale_Default"%>
<%@ Register TagPrefix="controls" TagName="customerDataForm" Src="~/Controls/customerForm.ascx" %>
<%@ Register TagPrefix="controls" TagName="itemDataList" Src="~/Controls/itemList.ascx" %>

<asp:content id="content1" ContentPlaceHolderID="mainContent" runat="server">

<div class="content">  
    <form id="newSale" method="post" action="saveSale.aspx">
    <h1>--- New Sale ---</h1>  
    <div class="section blackBoxShadow borderRad5" id="customerSection">        
        <asp:placeholder ID="customerPlaceHolder" runat="server" />
    </div>
</div>
</form>    
</div>
</asp:content>

Код:

Partial Class newSale_Default
Inherits System.Web.UI.Page


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim savedCustomerID As Integer
    Dim customerCtrl As Controls_customerData

    customerCtrl = CType(LoadControl("~\Controls\customerForm.ascx"), Controls_customerData)
    customerCtrl.ShowBankDetails = "false"

    If Request.QueryString("invno") <> "" Then
        Using connection As OdbcConnection = Common.getConnection("new")
            connection.Open()
            Dim openDB As OdbcCommand = Common.createCommand("SELECT customerId, id FROM invoices WHERE id='" & Request.QueryString("invNo") & "' LIMIT 1", connection, "new")
            Dim objDataReader As OdbcDataReader = openDB.ExecuteReader(CommandBehavior.CloseConnection)
            While (objDataReader.Read())
                savedCustomerID = objDataReader("customerId")
            End While
        End Using
        customerCtrl.customerID = savedCustomerID
    Else
        customerCtrl.customerID = 0
    End If

    customerPlaceHolder.Controls.Add(customerCtrl)

End Sub

End Class

Customer Form Control - простой HTML-документ, поэтому я не буду публиковать здесь все это, но заголовок:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="customerForm.ascx.vb" Inherits="Controls_customerData" %>

Код позади:

Partial Public Class Controls_customerData
Inherits System.Web.UI.UserControl

Private _customerID As Integer
Public Property customerID() As Integer
    Get
        Return _customerID
    End Get
    Set(ByVal value As Integer)
        _customerID = value
    End Set
End Property
Private _ShowBankDetails As Boolean
Public Property ShowBankDetails() As Boolean
    Get
        Return _ShowBankDetails
    End Get
    Set(ByVal value As Boolean)
        _ShowBankDetails = value
    End Set
End Property

Public Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    Me.bankDetails.Visible = Me.ShowBankDetails
End Sub

Public Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

    ' Add required Javascript or CSS for the web Control       
    Dim customerJS As New HtmlGenericControl("script")
    customerJS.Attributes.Add("type", "text/javascript")
    customerJS.Attributes.Add("src", "/Scripts/customerControl.js")
    Page.Header.Controls.Add(customerJS)

    If customerID <> 0 Then
        ScriptManager.RegisterStartupScript(customerControlIDController, GetType(HtmlGenericControl), "findUSer", "$(document).ready(function () { getCustomerByNumeric('id', '" & customerID & "');  });", True)
    End If
End Sub

End Class

1 Ответ

0 голосов
/ 21 января 2012

Полагаю, у вас проблема с жизненным циклом страницы. В какой точке контрольного кода вы пытаетесь получить доступ к свойству? Если вы выполните отладку, вы, вероятно, увидите, что значение не совсем готово.

Возможно, вставьте некоторый код из контрольного кода позади.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...