2012-01-21 13 views
0

私はユーザー入力フォームであるユーザーコントロールを持っています。プログラムでコード内のユーザーコントロールのカスタム属性を変更する

私はセールスシステムを開発していますが、セールスを生成するときは、顧客データにJavascript Auto Completeが設定されていますが、セーブされたセールをロードするときは、プログラムにユーザーIDをプログラムでペーストする必要があります。

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

私はprogrammticallyの値を変更できるようにする必要がありnewSale.aspx.vbに背後にあるコードで親ドキュメント(この場合には、それがnewSale.aspxと呼ばれています)

のマークアップ内のページに私のコントロールをレンダリングコントロールcustomerID属性。私はそれをするように見えることはできません。

これは、私は、様々なグーグルの試み以下、やっていることですが、それは常にゼロ

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として得意先を残しています。あなたが知っているだけのように、私は手動で得意先を設定している場合、私はコントロール

=========

EDITのために分離コード内その属性にアクセスすることができています、私はそれが今取り組んで持っていますコントロールを親ページのコードの後ろのページに追加することで、それは私の望むものではありません。ここに私が今やっていることがあります。唯一の違いは、コントロールのプレースホルダでコード内に追加することです。

親ページは次のようになります。後ろの

<%@ 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 

私はここにすべてのことを投稿しwo'tので、お客様フォームコントロールは、ロンドの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 

答えて

0

私はあなたのページのライフサイクルの問題があると思います。コントロールコードのどの時点でプロパティにアクセスしようとしていますか?デバッグすると、値がまだ準備できていないことがわかります。

おそらく、コントロールコードからいくつかのコードを貼り付けてください。

+0

あなたはおそらく正しいでしょう。私は今、親ページのコードの背後にプログラム全体でコントロールをページに追加することで修正しました。 –

+0

これまでのように私のコードをすべて追加しましたが、これはうまくいきましたが、私が言いましたように、親ページのコントロールをハードコードするのではなくplaceHolderに追加しました。 –

+0

正しくリコールすれば、ページのinitイベントの前にコントロールのinitイベントが発生するため、ページはまだプロパティを設定していません。見つけ出すためにデバッグしてください。 – ScottE

関連する問題