私はユーザー入力フォームであるユーザーコントロールを持っています。プログラムでコード内のユーザーコントロールのカスタム属性を変更する
私はセールスシステムを開発していますが、セールスを生成するときは、顧客データに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
あなたはおそらく正しいでしょう。私は今、親ページのコードの背後にプログラム全体でコントロールをページに追加することで修正しました。 –
これまでのように私のコードをすべて追加しましたが、これはうまくいきましたが、私が言いましたように、親ページのコントロールをハードコードするのではなくplaceHolderに追加しました。 –
正しくリコールすれば、ページのinitイベントの前にコントロールのinitイベントが発生するため、ページはまだプロパティを設定していません。見つけ出すためにデバッグしてください。 – ScottE