1

私は単純な foreach ループを使用してテーブル構造を作成している Web ページを持っています。ここで、td で画像を表示しています。要件は、ページの読み込み時に分離コードから td で作成された画像にアクセスすることです。

しかし、私はコントロールを見つけることができません.runat = 'server'としてコントロールを作成し、IDも設定しました。

foreach (DataRow r in dtLogic.TopStories(Convert.ToInt32(ConfigurationManager.AppSettings["TopArticles"]), Convert.ToInt32(ConfigurationManager.AppSettings["PortalId"])).Rows)
        {
            i++;
            str.Append("<table cellpadding='0' cellspacing='0' class='newsItem'>");
            str.Append("<tr>");
            str.Append("<td><img runat='server' id='img"+i+"' class='thumb' src='" + GetAppSettingValue("MainSiteUrl") + "" + r["image"].ToString() + "' width='128' height='73'></td>");
            str.Append("<td><p class='newsTitle'><a href='" + r["URL"].ToString() + "'>" + r["title"].ToString() + "</a></p></td>");
            str.Append("<td><img class='arrow' src='/images/arrow.png'></td>");
            str.Append("</tr>");
            str.Append("</table>");
        }

以下のようなコードビハインドからこの画像にアクセスすると..

HtmlImage img = (HtmlImage)this.FindControl("img1");

img オブジェクトの NullReference を取得します。

runat = 'server'である画像を取得せず、ページにレンダリングする理由を誰か教えてください..

4

2 に答える 2

3

ポストバックには存在しないため、アクセスできません。イメージ コントロールはサーバーにポスト バックされません。イベントをそれにバインドする必要がある場合 (クリックされたとき)、通常は page_init でコントロールを作成し、そのイベントを再バインドして動的コントロールを機能させます。

于 2011-09-29T22:24:33.643 に答える
1

アダム・チュリパーがぴったりです。

ポストバックされる非表示のテキストボックスに値を保存します。

また

これを行う方法は、Web サーバー コントロールを使用して作成することです。(これはかなり大変な作業です)

Image img = new image()....
HtmlTable tabl = new HtmlTable()
HtmlTr ...
HtmlTd ...
td.Controls.Add(img);

動的コントロールでは、viewtete が復元される前に作成する必要があるため、オーバーライドされたOnLoadイベントでこれらのコントロールを再作成します。

(ところで、runat='server' を文字列として何かに追加することはできません。自分で確認してください。Web ページでソースを表示すると、ソースに runat='server' が表示されます。他のサーバー コントロールには属性がありません。ビューソース)。

于 2011-09-29T22:37:58.860 に答える