アプリ版:「スタンプのみでお礼する」機能のリリースについて

ASP.Netの経験がほとんどないのですが、たった一つだけしなければいけないことがあり、それができずに困っています。

マスターページに以下のような処理を入れたいのです。

<link href="main.css?<%= utils.Utility.GetLastUpdated() %>" rel="stylesheet" type="text/css" media="screen" />

この<%= utils.Utility.GetLastUpdated() %>の部分がコードが実行されず、そのまま表示されてしまいます。

とても基本的なことなのだと思いますが、やりたいことはたったのこれだけなのです。わかる方、よろしくお願いします。

A 回答 (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);
}
    • good
    • 0
この回答へのお礼

期待通りにCSSにクエリ文字列を追加することができました。

ASP.NETの知識がまったくなく勉強する時間もなく、それでもこの処理だけどうにか実装する必要があったのでとても助かりました。ありがとうございます。

お礼日時:2009/08/18 03:44

こんにちは。



> ネームスペースにソリューション名を追加すればいいのでしょうか?
ソリューション名というか、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では難しいのでしょうか?

補足日時:2009/08/13 01:18
    • good
    • 0

こんにちは。



<%= 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 を作成しただけ

この回答への補足

ネームスペースにソリューション名を追加すればいいのでしょうか?やってみましたが同じ結果で、

&lt;%= ソリューション名.utils.Utility.GetLastUpdated() %>

と結果のHTMLには表示されます。ただそのまま表示されるのではなく、<%= が &lt;%= と展開されているあたりもおかしな感じです。

マスターページではなく普通の.aspxファイルなら<%= utils.Utility.GetLastUpdated() %>と記述することで正常に、上記のようにコードがそのまま表示されるのではなくプログラムの結果が表示されます。

Utilityクラスは以下のように定義しています。(余計なメソッドは省略)

namespace utils {
public static class Utility {
public static string GetLastUpdated()
{
return ConfigurationManager.AppSettings["LastUpdated"];
}
}
}

補足日時:2009/08/11 04:45
    • good
    • 0

IISの設定でASPやASP.NETが動作するようになっていますか?


また、拡張子がhtmlまたはhtmだったりしませんか。
ASPの場合は拡張子はasp、ASP.NETの場合はaspxにしてください。

この回答への補足

他のプログラムコード(DB処理など)は正常に実行されていますのでそういう問題ではないと思います。

補足日時:2009/08/06 15:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!