2

<%#DataBinder.Eval(Container.DataItem, "Display")%>パーツが表示されないリピーター コントロールがあります。「ディスプレイ」が格納するコードは次のように設定されます。

item.Display = "<script type='text/javascript'>
    AudioPlayer.embed('ffcedea7-4822-465f-85b6-89924f7b81fa',
    {soundFile: 'http://s3.amazonaws.com/blah/af8g7fd3-1793-4b5e-92b7-9d11ad1cc19c.mp3'});
</script>";

ページの読み込み後、オーディオ埋め込みファイルが表示されません。コードはソースにも表示されません。終了スクリプト タグの後にランダムな文字列を追加すると、そのランダムな文字列が表示されます。

item.Display = "<script type='text/javascript'>
    AudioPlayer.embed('ffcedea7-4822-465f-85b6-89924f7b81fa',
    {soundFile: 'http://s3.amazonaws.com/blah/af8g7fd3-1793-4b5e-92b7-9d11ad1cc19c.mp3'});
</script> THIS IS THE RANDOM STRING";

そのため、ページ ソースには「THIS IS THE RANDOM STRING」が含まれますが、スクリプト部分は含まれません。

この問題の原因と修正方法を知っている人はいますか? ありがとう!

編集:リピーターコードは次のとおりです。

<asp:Repeater ID="repeaterAddable" runat="server">
    <ItemTemplate>
        <div class="background-white">
            <div style="padding: 15px;">
                <table style="width: 100%" cellspacing="5">
                    <tr>
                        <td colspan="3" align="right">
                            Include this? <input type="checkbox" name="include<%#DataBinder.Eval(Container.DataItem, "Index")%>" />
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 30%;" valign="top">

                        </td>
                        <td style="width: 30%;" valign="top">
                            <div class="media">

                                <%#DataBinder.Eval(Container.DataItem, "Display")%>

                            </div>
                        </td>
                        <td style="width: 30%;" valign="top">

                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <br />
    </ItemTemplate>
</asp:Repeater>
4

2 に答える 2

0

おそらく、ページまたは webconfig に安全な設定がいくつかあります...

まったく新しいページであなたの状況を再現しようとしましたが、実際にはうまくいきました.

public class A
{
    public string Display { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
    var list = new List<A>();

    var a = new A();
    a.Display = "<script>alert('hi')</script>S<br/>";

    list.Add(a);

    rep.DataSource = list;
    rep.DataBind();
}

そして、そのページで

<asp:Repeater ID="rep" runat="server">
    <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem, "Display") %>
    </ItemTemplate>
</asp:Repeater>

おそらく、 with を設定して取得しようとすることがDisplayできHttpUtility.UrlEncodeますHttpUtility.UrlDecode...

于 2010-07-22T01:34:27.653 に答える
0

代わりにリテラル コントロールを追加して、そのテキスト プロパティを目的のコンテンツにバインドしてみてください。例えば:

<div class="media">
  <asp:Literal runat="server" Text='<%# Eval("Display") %>' />
</div>
于 2009-01-18T21:59:56.757 に答える