- PR -

HyperLinkコントロールの画像サイズの指定方法

投稿者投稿内容
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-01-09 21:29
基本的な質問ですみません。

HyperLinkコントロールのImageUrlに画像を指定し、その画像のサイズを元の大きさから変えようとしてWidthプロパティとかに値を入れてみたのですが、元の画像サイズにしかならないので、このような場合はどのように指定すればよいのでしょうか。

ImageButtonなら画像サイズを指定すればそれに合わせて拡大縮小をしてくれるのですが、HyperLinkコントロールだと、HTMLになったときにaタグなどimgタグの外のタグに対してサイズが指定されるので、画像は元の大きさのまま変わらないということのようです。ヘルプでHyperLinkコントロールのプロパティを見てみましたがそれらしいのは見つけられませんでした。

CSSにスタイルを書いて、スタイルシートで指定するというのが一つ考えられる(まだやっていませんので不確実ですけど)と思いますが、コントロールに直接指定する方法はないものでしょうか?

よろしくお願いします。

[ メッセージ編集済み 編集者: BT 編集日時 2007-01-09 21:40 ]

書き忘れました。ウェブアプリケーション(VS2005 C#)です。

[ メッセージ編集済み 編集者: BT 編集日時 2007-01-09 21:45 ]
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2007-01-10 01:20
ImageUrlを使わず、HTMLを直接書くというのはどうでせう?

コード:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="XXX">
    <img src="XXX" width="100" height="50" border="0" />
</asp:HyperLink>

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-01-10 06:14
引用:

ImageButtonなら画像サイズを指定すればそれに合わせて拡大縮小をしてくれるのですが、HyperLinkコントロールだと、HTMLになったときにaタグなどimgタグの外のタグに対してサイズが指定されるので、画像は元の大きさのまま変わらないということのようです。ヘルプでHyperLinkコントロールのプロパティを見てみましたがそれらしいのは見つけられませんでした。


ImageButtonでよいのでは?

コード:
      <asp:ImageButton ID="ImageButton1" runat="server" 
        Width="10" Height="10"
        ImageUrl="~/Images/ImageFile.gif" 
        PostBackUrl="~/Folder/NewPage.aspx" />


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-01-10 10:23
ぼのぼのさん、Accessさん、どうもありがとうございます。

ぼのぼのさんの言われた方法を見て、なるほどこれだ!と思ってやってみたのですが、どうやら属性値に指定しないと無視されてしまって、表示されないようです。
別ファイル(XML)にあるリンク集のデータをGridViewにバインドするので画像のURLも動的にimgコントロールにバインドしないといけないことからimgウェブコントロールを使ってましたが、試しに生のimgタグを書いてみてもダメでした。

Accessさんの言われるようにImageButtonにすればよいのでしょうが、ImageButtonを使った場合の副作用?というのがあるのではないかと自分なりに考えてまして、HyperLinkで何か方法があるのであればそちらにしたいと考えた次第です。

この副作用というものが実際にあるのかどうか?もしかして誤解ではないのか?ということで、いつか質問したいと思っていた内容でもあり、今回の件も関連しますので、もしよろしければ教えてください。

ImageButtonを使うと、inputタグとして出力されることになると思います。この場合、

(1)JavaScriptなどを多用しており、Googleなどの検索エンジンから見た場合、リンク先をたどって行きにくくなって(というか辿れない?)SEO的には不利ではないか?

(2)ポストバックでコンテンツを切り替える場合には(QueryStringを使わない限り)URLでユニークに指定ができず、例えば見て欲しい人に「このURLにアクセスして」なんていう風なことが言えなくなってしまう。どこかで読んだ記事によるとインターネット上のリソースにはユニークなURLが付くべきだなんてのもあったりして、確かにそうかもと納得した記憶もあります。

(3)リンク集などのように外部サイトに飛ぶ場合、リンク先でReffererを見てどこから来ているのかを集計したりしている場合に、正確な情報が得られるのか?(ここ実際どうなるのか未確認です)

(4)Global.asaxなどでページ読み込みをカウントして独自にアクセスログを取る場合、Button系コントロールだと2回アクセス(ポストバックとRedirect?)が発生してしまい、正確なカウントができない?(IISのログは大丈夫?)

とういうような疑問があります。
従って、インターネットに公開したい部分についてはHyperLinkやポストバックを使う場合でもQueryStringを使い、管理者ページではButton系コントロールをフルに使うというような使い分けをしていますが、これらの問題と思っている内容が回避できるので(あるいは誤解で)あれば公開ページにおいてもImageButtonを使うことも吝かではありません。

要はButton系コントロールの動作をよくわかっていないというのが問題なのだと思います。
NavigateUrlに指定があった場合、一旦必ずサーバにポストバックされてからRedirectされるのか、直接他ページに飛ぶのかでだいぶ動作が違うと思いますが、どちらなのでしょう。自分は前者だと理解していました。もし前者だった場合、Reffererはどうなるのでしょうか?また検索エンジンからするとサイトの中が見えにくくなるような気はしますが。

よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-10 13:07
(1)(2)について
確かにSEO的に不利だったりしますね。
で、URLの中にユニークに指定するためのコードを埋め込んだりします。

(3)について
クライアントにインストールしているセキュリティソフトがReffererの設定を
消したりすることがあるんじゃなかったでしたっけ。
なので、Reffererは一応の目安程度に思っておいたほうがいいと思います。

(4)について
初期表示のときはGETだしポストバック時はそれことPOSTですよね。
そういった形で判別することは可能だと思います。

> NavigateUrlに指定があった場合、一旦必ずサーバにポストバックされてから
> Redirectされるのか、直接他ページに飛ぶのかでだいぶ動作が違うと思い
> ますが、どちらなのでしょう。

生成されるHTML(JavaScriptを含む)を見ればわかるんじゃ?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-01-10 13:14
引用:
CSSにスタイルを書いて、スタイルシートで指定するというのが一つ考えられる(まだやっていませんので不確実ですけど)と思いますが、

子孫セレクタ(名前あってるかな)を使えばできますね。

引用:
(1)JavaScriptなどを多用しており、Googleなどの検索エンジンから見た場合、リンク先をたどって行きにくくなって(というか辿れない?)SEO的には不利ではないか?

おおむねおっしゃるとおりでしょうね。
そもそもFormのmethodがpostの場合はエンジンはたどってくれないでしょうね。
(追記:いや普通に考えればgetでもたどらないか。。)

引用:
(2)ポストバックでコンテンツを切り替える場合には(QueryStringを使わない限り)URLでユニークに指定ができず、例えば見て欲しい人に「このURLにアクセスして」なんていう風なことが言えなくなってしまう。どこかで読んだ記事によるとインターネット上のリソースにはユニークなURLが付くべきだなんてのもあったりして、確かにそうかもと納得した記憶もあります。

よく意味がわかりませんが、PostBackUrlにユニークなURLを指定すればよいのでは?

引用:
(3)リンク集などのように外部サイトに飛ぶ場合、リンク先でReffererを見てどこから来ているのかを集計したりしている場合に、正確な情報が得られるのか?(ここ実際どうなるのか未確認です)

特殊な場合でなければリファラは多分わたると思います。

引用:
(4)Global.asaxなどでページ読み込みをカウントして独自にアクセスログを取る場合、Button系コントロールだと2回アクセス(ポストバックとRedirect?)が発生してしまい、正確なカウントができない?(IISのログは大丈夫?)

PostBackUrlに外部ページを指定した場合自分のページへのポストバックは発生しません。

(3)(4)は試してみればいいだけの話ではないですか?

PostBackUrlを使うと、ASP.NET特有のパラメータが渡されるため、外部サイトに対して
そのまま使うのはお勧めしません。

引用:
ぼのぼのさんの言われた方法を見て、なるほどこれだ!と思ってやってみたのですが、どうやら属性値に指定しないと無視されてしまって、表示されないようです。
別ファイル(XML)にあるリンク集のデータをGridViewにバインドするので画像のURLも動的にimgコントロールにバインドしないといけないことからimgウェブコントロールを使ってましたが、試しに生のimgタグを書いてみてもダメでした。

GridViewを使わずに実験してみました。<asp:HyperLink>の子としてタグを含むのは
ASP.NETの仕様的にアリなのかはわかりませんが、<img>タグ、<asp:Image>タグともに画像リンクが
生成されました。GridViewのからみでどうしても無理そうなら、(最後の手段的な感じで)
Literalコントロールでも貼って、自分で<a>タグごと書くとか。。

[ メッセージ編集済み 編集者: べる 編集日時 2007-01-10 17:16 ]
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-01-10 17:41
どっとねっとふぁんさん、べるさん、どうもありがとうございます。

結局のところ、SEO的な側面から見た場合にはButtonコントロールはあまり望ましいものではないということのようですね。ということは皆さん、サーチエンジンに見つけて欲しいページはHyperLinkを使っているということでしょうか?
これに関連してどっとねっとふぁんさんが書かれた、

引用:

どっとねっとふぁんさんの書き込み (2007-01-10 13:07) より:
で、URLの中にユニークに指定するためのコードを埋め込んだりします。


が気になるのですが、具体的にはどうやるのでしょう。
http://www.atmarkit.co.jp/fdotnet/dotnettips/503aspurlmapping/aspurlmapping.html
のような感じでリマッピング?この場合でもURLは変えないといけないから無理矢理URLにパラメータを付けてQueryStringで判別するとかでしょうか?

引用:

べるさんの書き込み (2007-01-10 13:14) より:
よく意味がわかりませんが、PostBackUrlにユニークなURLを指定すればよいのでは?


書き方が分かりにくくてすみません。
例えばProduct.aspxというページがあったとして、ここに製品一覧をGridViewで表示しておき、製品を選択したら同じ画面のDetailsViewで詳細表示をするとします。この場合、両方同じProduct.aspxですので、外部から個別の製品の詳細情報のURLを直接指定しようと思ってもできませんよね。ですので、検索エンジンを意識するならばProduct.aspx?id=1とかでパラメータ渡し&QueryString処理のような方法にしてURLをユニークにしてやるのがいいのでは?という意味です。

それから、PostBackUrlについて、前回の投稿をした後にAccessさんのコードを見直して、あれ?と思ったのですが、.NET2.0から追加されたんですね。すっかり忘れてました。それに考えてみればImageButtonにNavigateUrlなんてないですよね。HyperLinkと混同してました。^_^;
1.1ならサーバ側でジャンプ先URLをRedirectに設定することになる(つまりポストバックは必ず発生する)ので結構大変ですが、これを使えば他ページへのポストバックができるので選択肢の一つだと思います。ただ、あくまでポストバックなのでViewStateとかもそのままに外部サイトにPOSTされてしまうのではと思うのであまり気持ちのよいものではないですが。とりあえずCSSやReffererの件などを調べるまで暫定措置としてこれを使いたいと思います。

引用:

どっとねっとふぁんさんの書き込み (2007-01-10 13:07) より:
生成されるHTML(JavaScriptを含む)を見ればわかるんじゃ?


これですが、JavaScriptには詳しくないので違っているかもしれませんが、直接HTML内にスクリプトが指定してあるわけではないようです。WebResource.axdというファイルの中で何かをやっているような感じです。

引用:

べるさんの書き込み (2007-01-10 13:14) より:
(3)(4)は試してみればいいだけの話ではないですか?


確かにおっしゃるとおりです。これから調べてみようとは思っていますが、環境にもよるかもしれないので仕様としてどうなの?というのが知りたかったものですから。
(3)については、以前やったことがあって、確かにポストバックでRedirectする場合には一回のアクセスで二回カウントアップしているようだったので、どうやって処理しようかと悩んだことがあります(この時はHyperLinkに変えたので不要になりましたが)。恐らくIISログもそうなのだと思うのですが、皆さんはどうやってアクセス数を判定しているのでしょうか?

引用:

どっとねっとふぁんさんの書き込み (2007-01-10 13:07) より:
初期表示のときはGETだしポストバック時はそれことPOSTですよね。
そういった形で判別することは可能だと思います。


という風にページの遷移状態を見てカウントを変えるロジックを組んでいるとか?
単純に2で割ればいいというものでもなさそうだし、PostBackUrlなんかがあると更に複雑になりますね。
この件については本筋から離れてしまうので、この辺りで止めてちょと考えてみたいと思います。必要なら別スレッドを立てることにします。

どうもありがとうございました。
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-01-10 18:04
度々すみません。

暫定処置としてPostBackUrlでやりますと書いたのですが、実際にやってみたところ、ジャンプ先のサーバによっては許可されてないメソッドということでエラーが返ってきたりするので、この手ではダメなようです。

PostBackUrlを使わずにポストバックして、コード内でRedirectを設定するのがとりあえずの処置としては無難なようです。

うーん、しかしこういう場合、皆さんどうやってるのだろう。
HyperLinkで画像サイズを指定するというニーズはよくありそうですけどね。

とりあえずご報告です。

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