2

ページにユーザーコントロールを動的に追加しています:

  • ユーザーがボタンをクリックすると、jquery ajax メソッドが実行され、Web メソッドが呼び出されます
  • Web メソッドは、文字列としてレンダリングされたユーザー コントロールを返します
  • ajax呼び出しの成功部分で、受信したhtmlがプレースホルダーに追加されます

私のユーザーコントロールをレンダリングする方法:

public static string RenderUserControlAsString(string path)
{
    var page = new PageOverride();
    var viewControl = (UserControl)page.LoadControl(path);
    page.Controls.Add(viewControl);
    var output = new StringWriter();
    HttpContext.Current.Server.Execute(page, output, true);
    return output.ToString();
}

これは問題なく動作しますが、asp:Image 要素の ImageUrl に問題があります (私のユーザー コントロールには複数の要素が含まれており、asp:Image はその 1 つにすぎません)。

<asp:Image ID="imgDelete" runat="server" ImageUrl="~/images/delete.gif" onmouseover="this.style.cursor='hand'" onmouseout="this.style.cursor='default'"/>

ImageUrlに変換されますが../images/delete.gif、これは問題ありません。実際には、 はImageUrl常に 2 つのドットとその前にスラッシュを受け取ります。それを防ぐ方法はありますか?

編集 - プロジェクト構造:

根:

  • 画像
    • 削除.gif
    • ...
  • Web コントロール
    • MyWebControl.ascx
    • ...
  • MyWebService.asmx
  • MyPage.aspx
4

2 に答える 2

1

ユーザーコントロールがaspx Webページに追加されると、Webページパスに関連する画像が検索されます。スラッシュ付きの2つのドットは、../1ステップ戻ることを意味します。この場合、Webページとフォルダーの両方として../images/delete.gif無効なものを検索しますの下にある。MyPage.aspximagesroot

ユーザー コントロールと Web ページを同じフォルダーに配置するか、パスを に変更しますimages/delete.gif

編集:次の階層では、ユーザー コントロール/Web ページを同じフォルダーに配置したり、フォルダーへのパスを変更したりする必要はありませんimages

根:

  • 画像

    削除.gif ...

  • Web コントロール

    MyWebControl.ascx ...

  • ウェブページ

    MyPage.aspx

于 2012-04-24T06:57:51.420 に答える
0

とりあえず、オーバーライド メソッドを Web コントロールに追加しました。

protected override void OnPreRender(EventArgs e)
{
      base.OnPreRender(e);

      // Don't use ImageUrl, set fixed src attribute.
      imgDelete.Attributes["src"] = "images/delete.gif";
}

欠点は、ルートフォルダーにあるページにのみ画像が表示されることですが、それは私にとってはうまくいきます。

別の方法は、jquery livequery プラグインを使用することです。

$('.Delete').livequery(function () {
    $(this).attr('src', 'images/delete.gif');
});

編集 - おそらく CssClass を画像ボタンに設定background: url(../images/add.gif)し、css で設定することもできます...

于 2012-04-26T05:52:11.620 に答える