- PR -

Aspxページからコードビハインドページ(.aspx.cs)の変数を参照する方法

1
投稿者投稿内容
骨骨★Rock!
常連さん
会議室デビュー日: 2007/09/11
投稿数: 38
投稿日時: 2007-09-11 17:09
ネット等で表題の件を検索して見ましたが、見つけられませんでした。
皆様のお知恵を拝借できれば幸いです。

.aspxページ

<uc1:UserContorol Id="UserContorl1" runat="server" ShopId="XXX">


.aspx.cs

public partial class ...
{
public int shopId=1;

 public int ShopId
{
get { return shopId; }
}

}

上記の様な場合で、.aspxのページのユーザーコントロールのShopIdのプロパティーに
.aspx.csの変数shopIdの値を参照して取得したいのですが、その記述方法が分かりません。

.aspx.csページで、
UserContorl1.ShopId=shopId;
とすれば動的に設定は可能かと思いますが、今回は、.aspxページの方で対処できればと考えております。

.aspxで下記の様な記述など試しましたが駄目でした。
ShopId="<%# shopId %>"

どなたか教えて頂けましたら、大変助かります。

宜しくお願い致します

環境VS2005(C#)


[ メッセージ編集済み 編集者: 骨骨★Rock! 編集日時 2007-09-11 17:54 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-09-11 19:14
引用:

aspxで下記の様な記述など試しましたが駄目でした。
ShopId="<%# shopId %>"



これは、Renderで実行されるのでそれより前にascx.cs側で参照するのは無理かと。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32663&forum=7
http://msdn2.microsoft.com/ja-jp/library/ms178135(VS.80).aspx
骨骨★Rock!
常連さん
会議室デビュー日: 2007/09/11
投稿数: 38
投稿日時: 2007-09-11 21:07
引用:

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32663&forum=7



ご返信頂きましてありがとうございます。
こちらのスレッドは投稿前に見させていただきました。
.aspxページの変数を.csページで参照するという自分とは逆の事をされたかったスレッド内容だと理解しました。

こちらのスレッドの中で、どっとねっとふぁんさんが
引用:

aspxファイルとaspx.csファイルの関係なのですが、
・aspx.csファイルが親
・aspxファイルが子
この親子の継承関係になります。
子の内部変数を親から操作することはできないので、無理ということになります。


とおっしゃっているので、.csのファイルが親、.aspxが子ならば、変数をプロパティーとして公開すれば、親の変数を子から参照する事ができるのかと思ったのですが、
そうではないのでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-11 21:58
「Aspxページからコードビハインドページ(.aspx.cs)の変数を参照する方法」ですよね。
だから逆にRenderのあとに設定された変数なら取得できるんじゃないですかね。
コードを書く大概のイベントはRenderより後ですから。

引用:
.aspxで下記の様な記述など試しましたが駄目でした。
ShopId="<%# shopId %>"

これはバインドのときの書き方では?
todoさんのはってくれたリンクをよく読みましょう。
<% =shopId %>
じゃないですかね。
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2007-09-11 22:04
バインドしていないのではないでしょうか。
ページ、もしくは該当のコントロールのDataBindメソッドのコールはしておられますか?



骨骨★Rock!
常連さん
会議室デビュー日: 2007/09/11
投稿数: 38
投稿日時: 2007-09-11 23:57
べるさん、kiyokuraさん
ご返信ありがとうございます。

引用:

kiyokuraさんの書き込み (2007-09-11 22:04) より:
バインドしていないのではないでしょうか。
ページ、もしくは該当のコントロールのDataBindメソッドのコールはしておられますか?



kiyokuraさんのヒントからPage.DataBind();をページロードに追加したら思い通りの
動きをするようになりました。ありがとうございます。
<%# %>の記述方法は、データグリッドぐらいでしか書いた事がなかったので、こういった風に使えるとは知りませんでした。Page.DataBind()で.csの変数をAspxページにバインドしてあげる必要があったのですね。


べるさん、
投稿前に一応色々と違う書き方を試してみました。
以下、<%=%>を使った結果です。htmlタグに値を埋め込みたいときには<%=%>で
ASP的に値を渡すことはできましたが、<asp:ではじまるサーバータグでは多分
利用できないのではないかと思います。(私の勝手な理解かもしれませんが…)


■ShopId="<%= ShopId %>"
⇒ビルドエラー
Cannot create an object of type 'System.Int32' from its string representation '<%= ShopId %>' for the 'ShopId' property.
(当方英語版のVSを利用しており、日本語でのエラー文章は分かりませんが、
'ShopId'のプロパティーとして文字列表現である'<%= ShopId %>'から'System.Int32'の型オブジェクトを生成する事ができません。)

■ShopId=<%= ShopId %>
⇒ビルドエラー
Server tags cannot contain <% ... %> constructs.
(サーバータグは<%...%>を構成することはできません)

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-12 00:15
失礼しました;;。。uc1:UserContorol のプロパティに設定するのは<%= %>は無理ですね。。

#そうか、Page自体もBindできるんですね。
1

スキルアップ/キャリアアップ(JOB@IT)