【问题标题】:<script>...</script> inside a repeater control code not showing up in the source code on page render<script>...</script> 内的转发器控制代码未显示在页面渲染的源代码中
【发布时间】:2009-01-18 21:20:19
【问题描述】:

我有一个转发器控件,其中&lt;%#DataBinder.Eval(Container.DataItem, "Display")%&gt; 部分不显示。 “显示”存储的代码设置如下:

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";

因此,在页面源上它将有“这是随机字符串”,但不是脚本部分。

有谁知道导致此问题的原因以及如何解决?谢谢!

编辑:这是中继器代码:

<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>

【问题讨论】:

  • 你能复制粘贴 代码吗?
  • 我没有看到任何
  • 计算结果为具有
  • 无法重现问题,需要更多信息。

标签: c# asp.net javascript repeater


【解决方案1】:

尝试添加一个 Literal 控件,并将其文本属性绑定到所需的内容。例如:

<div class="media">
  <asp:Literal runat="server" Text='<%# Eval("Display") %>' />
</div>

【讨论】:

  • 我在想这也可以,但没有办法测试它
  • 我刚试过,但代码仍然没有显示(即使在源代码中)。
【解决方案2】:

也许您的页面或 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>

也许您可以尝试将Display 设置为HttpUtility.UrlEncode 并使用HttpUtility.UrlDecode 获取它...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多