- - PR -
ユーザーコントロールの値を取得し、WebFormに設定する
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-04 18:26
<環境>
Windows XP ASP.NET(VB) で開発しています。 経験1ヶ月のど素人です。 どうぞよろしくお願いします。 <フォームの構成> WEBフォーム ユーザーコントロール(1つ)、テキストボックス(1つ) ユーザーコントロール(WEBフォームにはりつけるユーザーコントロール) ボタン(1つ)、テキストボックス(1つ) ユーザーコントロール上のボタンクリックした時 ユーザーコントロール上のテキストボックスの値を WEBフォーム上のテキストボックスに設定したいのです。 でもうまくできません。 どうぞお力をお借りできないでしょうか? (イベントは拾えています。) ユーザーコントロール側 Public Event btnClicked(ByVal sender As System.Object, ByVal e As System.EventArgs) WEBフォーム側 Protected UC2 As New WebUserControl2 Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.Click RaiseEvent btnClicked(Me, System.EventArgs.Empty) End Sub Page_Loadで AddHandler UC2.btnClicked, AddressOf Me.Search_clicked Private Sub Search_clicked(ByVal sender As Object, ByVal e As System.EventArgs) Dim myControl1 As Control = FindControl("TextBox1") TextBox1.Text = ここにユーザーコントロール上テキストボックスの値 End Sub こんな感じでやりたいと思っているのですが、 どうやってユーザーコントロールの値を取得すれば良いかわかりません。 どうぞ宜しくお願いします。 | ||||||||
|
投稿日時: 2005-01-04 18:45
.NET Framework 開発者ガイド ポストバック データ処理のサンプル http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconpostbackdataprocessingsample.asp にサンプルがありますよ。 詳しくは .NET Framework 開発者ガイド ポストバック データの処理 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconreceivingpostbackdatachangednotifications.asp .NET Framework 開発者ガイド ASP.NET サーバー コントロールの開発 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconDevelopingWebFormsControls.asp うまくいかなかったら、また書き込んでみてください。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-01-05 13:09
段階を踏んでURLを指定して頂きありがとうございます。 そして試してみたのですが、エラーが出てしまいました。 これを自力で解決できませんでした。 <エラー> 解析エラー メッセージ: ファイルまたはアセンブリ名 CustomControls、またはその依存関係の 1 つが見つかりませんでした。 アセンブリ読み込みトレース: 以下の情報は、アセンブリ 'CustomControls' を読み込めなかった原因を調べるのに役立ちます。 なので、折角教えて頂きましたのにまだ実現出来ていないのです。 ただ、Sourceをはって、実行するだけではだめだったのでしょうか? 質問以前の問いで大変申し訳ないのですが、ご教授頂けますか? それから、 Public Property Text() As String ・・・ を使用する事は思いつきもしなかったので大変ためになりました。 ”ポストバックデータ処理”についても。 ありがとうございます。 引き続きTRYします。 | ||||||||
|
投稿日時: 2005-01-05 13:28
msoです。
とりあえずリビルドしてもだめですか? | ||||||||
|
投稿日時: 2005-01-05 13:34
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconreceivingpostbackdatachangednotifications.asp に クライアントからポストバックされたフォーム データをコントロールで確認できるようにするには、そのコントロールに System.Web.UI.IPostBackDataHandler インターフェイスを実装する必要があります。 とあります。 これを把握しないと実装できないです。 初めてだとちょっと判りづらいところで、苦労するかもしれません。 この文書を追っかけてみて、わからなかったらご質問ください。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-01-05 13:38
ユーザコントロール内のコントロールを操作したいだけなら、ユーザコントロールのプロパティを増やせばいいのではないでしょうか。
元のユーザコントロールに
を加えてみましょう。 | ||||||||
|
投稿日時: 2005-01-05 14:24
こんなに助けて頂いて有り難く思っています。
msoさん ビルドはOKです。 たつごろーさん にしざきさん すみません。 まだそこまで達する事ができていません。 手順としては 教えて頂いたMSのサイトのコードで実現させてから自分の 環境に実装しようとしています。 以降にコードを示します。(MSのサンプルをそのままはっただけなのですが・・・) <VB側> Option Explicit On Option Strict On Imports System Imports System.Web Imports System.Web.UI Imports System.Collections.Specialized Namespace CustomControls Public Class MyTextBox Inherits Control Implements IPostBackDataHandler Public Property Text() As String Get Return CType(ViewState("Text"), String) End Get Set(ByVal Value As String) ViewState("Text") = Value End Set End Property Public Event TextChanged As EventHandler Public Overridable Function LoadPostData(ByVal postDataKey As String, ByVal values As NameValueCollection) As Boolean Implements IPostBackDataHandler.LoadPostData Dim presentValue As String = Text Dim postedValue As String = values(postDataKey) If Not presentValue.Equals(postedValue) Then Text = postedValue Return True End If Return False End Function Public Overridable Sub RaisePostDataChangedEvent() Implements IPostBackDataHandler.RaisePostDataChangedEvent OnTextChanged(EventArgs.Empty) End Sub Protected Overridable Sub OnTextChanged(ByVal e As EventArgs) RaiseEvent TextChanged(Me, e) End Sub Protected Overrides Sub Render(ByVal output As HtmlTextWriter) output.AddAttribute(HtmlTextWriterAttribute.Type, "text") output.AddAttribute(HtmlTextWriterAttribute.Value, Me.Text) output.AddAttribute(HtmlTextWriterAttribute.Name, Me.UniqueID) output.RenderBeginTag(HtmlTextWriterTag.Input) output.RenderEndTag() End Sub End Class End Namespace Public Class MyTextBox Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化するユーザー コードをここに挿入します。 End Sub End Class <デザイン側> <%@ Page Language="vb" AutoEventWireup="false" Codebehind="MyTextBox.aspx.vb" Inherits="WebApplication1.MyTextBox"%> <%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %> <html> <script language="VB" runat=server> Private message As New StringBuilder("") Private Sub Text_Changed(sender As Object, e As EventArgs) message.Append(("The text in" & sender.ToString() & " was changed.")) message.Append(("<br>You entered " & Server.HtmlEncode(Box.Text) & ".")) End Sub Protected Overrides Sub Render(output As HtmlTextWriter) MyBase.Render(output) output.Write(message.ToString()) End Sub </script> <body> <form method="POST" action="MyTextBox.aspx" runat=server> The text box below is an instance of a custom text box.<br> It raises a text changed event when the text in the text box changes.<br><br> Enter your name: <Custom:MyTextBox Text=" " OnTextChanged = "Text_Changed" id = "Box" runat=server/> <br><br> <asp:Button Text = "Submit" runat = server/> </form> </body> </html> これで全てです。 これが動いてくれないのです。 たつごろーさんのご指摘のところは Implements IPostBackDataHandler だと思っているのですが、認識違いをしていますか? | ||||||||
|
投稿日時: 2005-01-05 14:31
これが動かないというのは、このエラーがでてるということ?
ASP.NETのWebフォーム側で出てるんじゃないかな。 別のプロジェクトのWebフォームにこのコントロールを埋め込めるか試してみてはいかが。 _________________ たつごろー codeseek こみゅぷらす |