初歩的な質問ですみません、誰か教えてください。
Webアプリケーション XXX.aspx と XXX.cs を作っています。
テキストボックスのようなコントロールの中に保存された値はXXX.aspxからXXX.csに渡さ
れます。
つまり、XXX.aspxでTextBoxを以下のように定義できますし、XXX.csで、TextBox.Textで
値を使うことができます。
<asp:TextBox ID=tbxUsername runat=server></asp:TextBox>
しかし、XXX.aspxの中で(テキストボックスのようなコントロールとは無関係に)自由に
変数を定義することはできるのでしょうか?
また、その値をXXX.csに渡すことはできますか?
(こういうふうに質問して分かってもらえるかどうか、わかりません。)
<% ~ %>内で普通に定義可能です。
ローカル変数のような扱いになります。
scriptブロックで宣言すれば,フィールドと同じ扱いになります。
> また、その値をXXX.csに渡すことはできますか?
XXX.aspx.cs内のクラスを継承したクラスとして,XXX.aspxを出力するためのクラスが作
られるため,XXX.aspx.cs中からXXX.aspx内のフィールドへのアクセスは当然できませ
ん。
テキストボックスにしても,XXX.aspx.cs内のクラスのフィールドとして宣言されている
ために,XXX.aspx.cs内のクラスからアクセス可能になっているだけです。
アドバイス有難うございます。
そうすると、XXX.aspxで定義する<%~%>のローカル変数の値をxxx.csに渡すためには、
どのようにすればいいのでしょうか?
たとえば、下記の方法で渡すことはできるのでしょうか?
(1)コントロールを定義しておいて(表示したくないのでVisibleにしないとかできるで
しょうか?)
(2)<%~%>で定義したローカルな変数に値を入れる。
(3)そのローカル変数を、(1)のコントロールに入れる。
(4)そのコントロールの値をXXX.aspx.csで読んで処理する。
というような方法が取れますでしょうか。
> そうすると、XXX.aspxで定義する<%~%>のローカル変数の値をxxx.csに渡すために
は、
> どのようにすればいいのでしょうか?
XXX.aspxでローカル変数を定義しないことが,一番の上策だと思いますが……。
<% ... %>のブロックは,そのままコンパイル後のクラスにおいて,プログラムのコード
になります。
なので,*.csでできることは*.aspxのコードブロックでできることになります。
> (1)コントロールを定義しておいて(表示したくないのでVisibleにしないとかできる
で
> しょうか?)
> (2)<%~%>で定義したローカルな変数に値を入れる。
> (3)そのローカル変数を、(1)のコントロールに入れる。
> (4)そのコントロールの値をXXX.aspx.csで読んで処理する。
コントロールにIDを振っておけば,そのIDをフィールド名として.aspx上からアクセス出
来ます。
なので,
コントロールID.プロパティ = 変数
のようにしてプロパティに値を代入出来ますし,
変数2 = コントロールID.メソッド(変数)
のようにしてメソッドの呼び出しも可能です。
すみません、私が、よく理解できていません。
そこで、実際のプログラムを見ていただいたほうがいいと思いました。
以下はXXX.aspxです。実行するとボタン”Pass user password, site to XXX.aspx.cs”
が表示されます。
クリックすると、XXX.aspx.csが起動されますが、XXX.aspx.csでは、(見えない)3つの
テキストボックスtxbUsername、txbPassword、txbSitenameに最初から設定した値、
user1、passowrd1、site1を参照して処理します。
このときに、3つのテキストボックスに設定した値を(テキストボックスを表示してユー
ザが手で変更するのではなく) 最初にXXX.aspxを起動するときのパラメータにして与え
る、または、XXX.aspxに設定した変数で書きなおす(user1,password1,site1という値を
上書きする)ことをやりたいのです。
<%@ Page Language=C# AutoEventWireup=true CodeFile=XXX.aspx.cs
Inherits=_Default %>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0
Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns= http://www.w3.org/1999/xhtml >
<head runat=server>
<title>Invoker Test Program 2</title>
</head>
<body>
<script> A = aaaa </script>
<form id=form1 runat=server>
<div>
<asp:TextBox ID=tbxUsername runat=server Visible=false
Text=user1 ></asp:TextBox><br />
<asp:TextBox ID=tbxPassword runat=server TextMode=Password
Visible=false Text=password1></asp:TextBox><br />
<asp:TextBox ID=tbxSitename runat=server Visible=false
Text=site1></asp:TextBox><br />
<asp:TextBox ID=tbxPath runat=server
Visible=false></asp:TextBox><br />
<asp:Button ID=Button1 runat=server OnClick=Button1_Click
Text=Pass user password, site to XXX.aspx.cs Width=300px />
<! XXX.aspxで設定した変数を、上記のテキストボックスのテキストとして設定
し、XXX.aspx.csに渡したいのですが、何かいい方法はないでしょうか? >
<!
tbxUsername.Text = user
<% string username = user2; %>
<% string password = password2; %>
<% string sitename = site2; %>
>
</div>
</form>
</body>
</html>
使用するコントロールより下でプロパティを変更しようとしても,その時点でコントロー
ルは出力されています。
そのため,出力されるものに変化はありません。
変更するならばコントロールより上で値を設定する必要があります。