- ベストアンサー
マスターページにコードを入れたい
- ASP.Netの経験がほとんどないのですが、マスターページに特定の処理をコードで実行したいと思っています。
- <%= utils.Utility.GetLastUpdated() %>のコードが正しく実行されず、表示されてしまう問題が発生しています。
- マスターページにmain.cssファイルをリンクする際に、コードが正しく動作しない状況に困っています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 aspx 側のコードを一切とっぱらって、コードビハインドの方に以下のコードを入れたら一応動きました。いかがでしょうか。 protected void Page_Load(object sender, EventArgs e) { HtmlLink cssLink = new HtmlLink(); cssLink.Href = "main.css?" + utils.Utility.GetLastUpdated(); cssLink.Attributes.Add("rel", "stylesheet"); cssLink.Attributes.Add("type", "text/css"); cssLink.Attributes.Add("media", "screen"); this.Page.Header.Controls.Add(cssLink); }
その他の回答 (3)
- nn1102
- ベストアンサー率80% (12/15)
こんにちは。 > ネームスペースにソリューション名を追加すればいいのでしょうか? ソリューション名というか、utils.Utility クラスが属するプロジェクトがありますよね。それを右クリック→プロパティ→「アプリケーション」タブの「既定の名前空間」に書いてある文字です。 P タグでは再現しませんが、HEAD タグ内に LINK タグを同じように入れてみたところ再現しました。 周囲の HTML との関係?ちょっと原因はわからないです、すみません。 かなり力技な感じですが、以下のコードだとcss?の後に得たい値が入ると思います。 <%="<link href=main.css?" + WebApplication1.utils.Utility.GetLastUpdated() + " rel=""stylesheet"" type=""text/css"" media=""screen"" />"%>
補足
ネームスペースは utils だけでした。 <%="<link href=main.css?" + WebApplication1.utils.Utility.GetLastUpdated() + " rel=""stylesheet"" type=""text/css"" media=""screen"" />"%> この記述を入れたら、以下のエラーが出ました。 The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>) このエラーを調べてみたら、<%= %> ではなく <%# %> を使うと良い的なことが書いてあったので試したところ、今度はエラーは消えましたが何の出力もされなくなりました(<link>タグ自体が出力されない)。 やりたいことは非常にシンプルなこと(更新した日付をクエリ文字列としてCSSファイルに付ける)なのですが、ASP.Netでは難しいのでしょうか?
- nn1102
- ベストアンサー率80% (12/15)
こんにちは。 <%= utils.Utility.GetLastUpdated() %> を フルネームスペースで記述されてみてはどうでしょうか。 私の実験したソリューション、プロジェクト名:WebApplication1 自作のクラス:Site1.Master、Utility.vb、WebForm1.aspx ◆Site1.Master の aspx の body 内に一行追加 <p><%=WebApplication1.utils.Utility.GetLastUpdated()%></p> ◆Utility.vb の内容 Namespace utils Public Class Utility Public Shared Function GetLastUpdated() As String Return DateTime.Now.ToString("yyyyMMddHHmmss") End Function End Class End Namespace ◆WebForm1 ウィザード通りに ContentPlaceHolder を作成しただけ
補足
ネームスペースにソリューション名を追加すればいいのでしょうか?やってみましたが同じ結果で、 <%= ソリューション名.utils.Utility.GetLastUpdated() %> と結果のHTMLには表示されます。ただそのまま表示されるのではなく、<%= が <%= と展開されているあたりもおかしな感じです。 マスターページではなく普通の.aspxファイルなら<%= utils.Utility.GetLastUpdated() %>と記述することで正常に、上記のようにコードがそのまま表示されるのではなくプログラムの結果が表示されます。 Utilityクラスは以下のように定義しています。(余計なメソッドは省略) namespace utils { public static class Utility { public static string GetLastUpdated() { return ConfigurationManager.AppSettings["LastUpdated"]; } } }
- pick52
- ベストアンサー率35% (166/466)
IISの設定でASPやASP.NETが動作するようになっていますか? また、拡張子がhtmlまたはhtmだったりしませんか。 ASPの場合は拡張子はasp、ASP.NETの場合はaspxにしてください。
補足
他のプログラムコード(DB処理など)は正常に実行されていますのでそういう問題ではないと思います。
お礼
期待通りにCSSにクエリ文字列を追加することができました。 ASP.NETの知識がまったくなく勉強する時間もなく、それでもこの処理だけどうにか実装する必要があったのでとても助かりました。ありがとうございます。