使用javascript从转发器获取字面值

时间:2013-11-28 20:46:26

标签: javascript asp.net

我有一个转发器,如下所示。如何在后面的代码中获取文字的值(使用ltlText id)。

背后的代码

 ltlTitle.Text = Core.GetString(e.Item.DataItem("Title"))

ASPX

    <asp:Repeater ID="rptSlideshow" runat="server" EnableViewState="false">
                <ItemTemplate>
                    <div class="SlideItem">
                        <div id="divBottomText" class="SlideShowBottomText">
                          <h2 ><asp:Literal runat="server" ID="ltlTitle" EnableViewState="false" /></h2>
                          <p ><asp:Literal runat="server" ID="ltlDescription" EnableViewState="false" /></p>

                        </div>
                        <div class="SlideShowBottomUnderlay">&nbsp;</div>
                </ItemTemplate>
            </asp:Repeater>

我需要javascript代码才能在repeaterdiv中获取ltlTitle的值。

我尝试了这个,但它不起作用:

var value = $(this).closest('.divBottomText').find('[id*=ltlTitle]').text();
alert(value)

3 个答案:

答案 0 :(得分:1)

您的方法存在一些问题。

  1. Literal不会呈现任何HTML标记。因此,您无法使用javacript访问Literal。使用标记作为span标记。

  2. 即使您使用Label,当Repeater重复它的项目时,您可能会看到多个具有相同名称的标签(* _lblTitle_0,* _lblTitle_1等)。您可以在数组中获取所有值,选择其ID中包含“lblTitle”的所有跨度。

  3. 你在转发器里面有一个未关闭的div。你需要关闭它 工作正常。

  4. 我会这样做。

    这是我的标记,带有要测试的jquery函数:

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>
        </title>
         <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <script type ="text/javascript">
            function myFunction() {
                var myArray = $("span[id*='lblTitle']").map(function() {
                    return $(this).text();
                }).get();
                alert(myArray);
            }
        </script>
        <form id="form1" runat="server">
            <div>
                <asp:Repeater ID="rptSlideshow" runat="server" EnableViewState="false">
                    <ItemTemplate>
                        <div class="SlideItem">
                            <div id="divBottomText" class="SlideShowBottomText">
                                <h2>
                                    <asp:Label runat="server" ID="lblTitle" EnableViewState="false" Text='<%#Eval("Title") %>' />
                                </h2>
                                <p>
                                    <asp:Literal runat="server" ID="ltlDescription" EnableViewState="false" /></p>
                            </div>
                            </div>
                            <div class="SlideShowBottomUnderlay">&nbsp;</div>
                    </ItemTemplate>
                </asp:Repeater>
            </div>
            <input type="button" id="btn" onclick="myFunction();" value="TEST"/>
        </form>
    </body>
    </html>
    

    代码背后我有一个类名MyClass,我正在创建一个MyClass对象列表,并在页面的Page_Load事件中将其设置为转发器的数据源:

    public partial class WebForm4 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                rptSlideshow.DataSource = new List<MyClass>()
                {
                    new MyClass {Id = 1, Title = "Item 1", Description = "Item 1"},
                    new MyClass {Id = 2, Title = "Item 2", Description = "Item 2"},
                    new MyClass {Id = 3, Title = "Item 3", Description = "Item 3"},
                    new MyClass {Id = 4, Title = "Item 4", Description = "Item 4"}
    
                };
                rptSlideshow.DataBind();
            }
        }
    
    }
    
    public class MyClass
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }
    

    当我运行测试并单击“TEST”按钮时,我收到此提醒:

    enter image description here

答案 1 :(得分:0)

在浏览器中打开源代码find = ltlTitle

你必须确定。

id="ctl00_ltlTitle"可能会改变为。

答案 2 :(得分:0)

alikarakoc是对的,转发器将破坏ID客户端,这是所有ASP.NET webforms容器对子项的作用。您应该避免编写依赖于客户端ID的Javascript。

一种技术是使用C#生成Javascript并将其动态注入页面的<head>;这样您就可以引用Literal(或任何其他服务器控件)的ClientID属性,是正确的ID(包括容器名称前缀)。