我有一个转发器,如下所示。如何在后面的代码中获取文字的值(使用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"> </div>
</ItemTemplate>
</asp:Repeater>
我需要javascript
代码才能在repeater
和div
中获取ltlTitle的值。
我尝试了这个,但它不起作用:
var value = $(this).closest('.divBottomText').find('[id*=ltlTitle]').text();
alert(value)
答案 0 :(得分:1)
您的方法存在一些问题。
Literal不会呈现任何HTML标记。因此,您无法使用javacript访问Literal。使用标记作为span标记。
即使您使用Label,当Repeater重复它的项目时,您可能会看到多个具有相同名称的标签(* _lblTitle_0,* _lblTitle_1等)。您可以在数组中获取所有值,选择其ID中包含“lblTitle”的所有跨度。
你在转发器里面有一个未关闭的div。你需要关闭它 工作正常。
我会这样做。
这是我的标记,带有要测试的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"> </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”按钮时,我收到此提醒:
答案 1 :(得分:0)
在浏览器中打开源代码find = ltlTitle
你必须确定。
id="ctl00_ltlTitle"
可能会改变为。
答案 2 :(得分:0)
alikarakoc是对的,转发器将破坏ID客户端,这是所有ASP.NET webforms容器对子项的作用。您应该避免编写依赖于客户端ID的Javascript。
一种技术是使用C#生成Javascript并将其动态注入页面的<head>
;这样您就可以引用Literal(或任何其他服务器控件)的ClientID属性,将是正确的ID(包括容器名称前缀)。