質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3529閲覧

meta:resourcekeyをコードビハインドで指定したい

toyotaku

総合スコア103

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/01/30 08:59

編集2020/01/31 07:37

ASP.netで、グローバル対応のWebサイトを開発しています。
開発環境はVisual Studio 2013、
.net Framework 4.5.1です。

meta:resourceKeyを指定すると、ローカルリソースファイルから
対応するプロパティをコントロールに対しセットすることができますが、
これをコードビハインドから指定するにはどのようにするのでしょうか?
そもそも可能なのでしょうか?
ListViewでデータを一覧表示しており、
ListViewへバインドされたデータのレコードの内容に応じて対応する
リソースキーを変更しようとしています。
実際にはリソースファイルから取得したいプロパティが大量にあり、
GetLocalResourceObjectで1つ1つプロパティを列挙するのが面倒なことから、
コードビハインドでresourceKeyを指定することができないだろうか、と考えました。

例えば、ローカルリソース内に以下のように設定があるとします。

名前
key1.Textkey1Text
key1.CssClasscssClassName1
key2.Textkey2Text
key2.CssClasscssClassName2

aspxで以下のようにresourcekeyにkey1を指定すれば、
Textプロパティは"key1Text"、cssClassプロパティは"cssClassName1"になります。

aspx

1<asp:Label id="hoge" meta:resourcekey="key1" runat="server" />

以下のようにresourcekeyにkey2を指定すれば、
Textプロパティは"key2Text"、cssClassプロパティは"cssClassName2"になります。

aspx

1<asp:Label id="hoge" meta:resourcekey="key2" runat="server" />

ラベルオブジェクトのmeta:resourcekeyに指定する値(この例では"key1" or "key2")を
aspxではなくコードビハインド側で設定できないか、というのが質問の内容です。

グローバルリソースであればResource.クラス名.リソースキー名、
ローカルリソースであればGetLocalResourceObject(string)で
取得できることは知っています。
例えば、以下のようにすれば、リソースから取得した値をhogeのTextプロパティに
セットすることができます。

C#

1hoge.Text = GetLocalResourceObject("key1.Text").ToString(); 2hoge.CssClass= GetLocalResourceObject("key1.CssClass").ToString();

そうではなく、リソースキー自体を書き換えるようなことができないでしょうか。
イメージ的には以下のように。当然うごきません。

C#

1hoge.resourceKey = "key1";

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/30 12:31

何を作っているかと開発環境ぐらいは書きませんか?
toyotaku

2020/01/31 01:37

失礼致しました。質問の冒頭へ追記しました。
退会済みユーザー

退会済みユーザー

2020/01/31 03:55

対応をありがとうございました。 > リソースキー自体を書き換える リソースファイルを追加すると、xxx.Designer.cs という名前(xxx は拡張子無しのリソースファイル名)の「厳密に型指定されたリソースクラス」が自動的に生成されますが、「リソースキー自体を書き換える」というのはその中のプロパティ名を書き換えるのと同じことになるはずで、それをコードビハインドのコードで行うのは不可能とまで言い切る自信はないですが、現実的ではなさそうです。 そもそも何がしたいのでしょう? もし、XY問題の Y を質問しているとすると、X は何なのかも説明していただけると、代案が出てくるかもしれません。
toyotaku

2020/01/31 04:52

申し訳ございません。誤解させてしまっているようです。 リソースファイルそのものを動的に変更したいのではなく、 画面オブジェクトのmeta:resourcekey="rk" の "rk"の部分を 動的に変更したいというのが質問の内容です。 (質問内の"hoge"は例として挙げていますが、Labelオブジェクトです) リソースファイルそのものは静的で構いません。 また、質問の意図から逸れますが、ローカルリソースですので.リソースクラスは生成されないものと考えます。 例えば、ローカルリソース内に以下のように設定があるとします。 名前:値 key1.Text:key1Text key1.CssClass:cssClassName1 key2.Text:key2Text key2.CssClass:cssClassName2 aspxで、Labelオブジェクトのmeta:resourcekeyに"key1"を指定すれば そのLabelオブジェクトの Textプロパティは"key1Text"、cssClassプロパティは"cssClassName1"になり、 meta:resourcekeyに"key2"を指定すれば Textプロパティは"key2Text"、cssClassプロパティは"cssClassName2"になります。 ラベルオブジェクトのmeta:resourcekeyに指定する値(この例では"key1" or "key2")を aspxではなくコードビハインド側で設定できないか、というのが質問の内容です。 >そもそも何がしたいのでしょう? ListViewでデータを一覧表示しており、 ListViewへバインドされたデータのレコードの内容に応じて対応する リソースキーを変更しようとしています。 実際にはリソースファイルから取得したいプロパティが大量にあり、 GetLocalResourceObjectで1つ1つプロパティを列挙するのが面倒なことから、 コードビハインドでresourceKeyを指定することができないだろうか、と考えました。
退会済みユーザー

退会済みユーザー

2020/01/31 07:32 編集

質問を編集して上記のことを追記していただくようお願いします。質問のコメント欄は初期画面では開いてないので、読まない人が多々いるようですので。質問欄での情報提供をお願いします。
退会済みユーザー

退会済みユーザー

2020/01/31 07:35 編集

> ラベルオブジェクトのmeta:resourcekeyに指定する値(この例では"key1" or "key2")を aspxではなくコードビハインド側で設定できないか、というのが質問の内容です。 埋め込みコードブロックも使えませんし、自分が知る限り何ともならないと思います。(自分が知らないだけという可能性は否定しきれませんが) コードビハインド側で動的にキー名を変えるとすると、自分が思いつくのは GetLocalResourceObject メソッドを使って引数のキー名の指定を動的に変えてリソースから当該文字列を取得し Label.Text, Label.CssClass に設定するぐらいです。(多分すでに質問者さんが取っている方法)
toyotaku

2020/01/31 07:44

質問を編集いたしました。
退会済みユーザー

退会済みユーザー

2020/01/31 09:11 編集

対応いただきありがとうございます。 Microsoft 公式解説書「プログラミング Microsoft ASP.NET 4」を調べてみたところ、"meta:resourcekey 式を使用できるのは設計時だけです" という記述があって、リソースを埋め込むためのテキストをプログラムから取得するには GetLocalResourceObject メソッドを使うと書いてありました。質問者さんが今取っている手段の他に手はなさそうな気がします。 詳しい人が質問を見て回答してくれるかもしれませんので、それをお待ちください。
toyotaku

2020/02/05 00:38

体調を崩していて確認が遅れました。失礼致しました。 書籍までご確認頂き、ありがとうございます。 他に回答も付かないようですので、クローズいたします。
退会済みユーザー

退会済みユーザー

2020/02/05 01:40 編集

一般閲覧者が一目見てクローズしたことが分かるように、回答欄にクローズした旨書いて解決済みマークを付けるか(解決してないのにそういうマークを付けるのは抵抗があるかもしれませんが)、または、回答欄の上の方(タイトルがよさそう)にクローズした旨書いていただくようお願いします。
guest

回答1

0

自己解決

質問内容より引用
「Microsoft 公式解説書「プログラミング Microsoft ASP.NET 4」を調べてみたところ、
"meta:resourcekey 式を使用できるのは設計時だけです" という記述があって、リソースを埋め込むためのテキストをプログラムから取得するには GetLocalResourceObject メソッドを使うと書いてありました。質問者さんが今取っている手段の他に手はなさそうな気がします。」
とのことですので、
meta:resourcekeyをコードビハインドで指定することはできないと判断しました。
クローズ致します。

投稿2020/02/05 08:07

toyotaku

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問