use*_*169 15 c# asp.net repeater
我在转发器中有一个UserControl.转发器的数据源来自SQL Server.
用户控件的.cs - MoviePanel.ascx.cs:
public int myMovieID { get; set; }
public string myMovieName { get; set; }
public string myMovieDescription { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
MovieIDLbl.Text = myMovieID.ToString();
MovieNameLbl.Text = myMovieName;
DescriptionLbl.Text = myMovieDescription;
}
Run Code Online (Sandbox Code Playgroud)
ASPX页面:
<asp:Repeater ID="Repeater1" DataSourceID="ListOfMoviesDS" runat="server">
<ItemTemplate>
<uc1:MovieDetailPanel runat="server" myMovieID='<%# Eval("MovieID") %>'
myMovieName='<%# Eval("movieName") %>'
myMovieDescription='<%# Eval("movieDescription") %>'
id="MovieDetailPanel1" />
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("MovieID") %>'></asp:Label>
<asp:Label ID="Label2" runat="server"
Text='<%# Eval("movieName") %>'></asp:Label>
<asp:Label ID="Label3" runat="server"
Text='<%# Eval("movieDescription") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
这里发生了一件很奇怪的事 值未传递给UserControl.但是,如果我将标签放在用户控件下面并使用Eval()
它设置文本.您可能认为用户控件可能是问题所在.但是,如果我手动输入内容,代替<%# Eval("movieName") %>
它会被传递给用户控件并显示.
我没有线索!如果问题出在Eval()标签上也不应该得到文本.或者,如果问题出在UserControl上,我的手册文本不应该通过.我不知道为什么Eval()的值没有达到UserControl.
Win*_*Win 13
你的代码工作正常; 我测试了它(见页面底部).最糟糕的情况是,您可以尝试在ItemDataBound事件中分配这些值.
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<uc1:MoviePanel runat="server" id="MovieDetailPanel1" />
</ItemTemplate>
</asp:Repeater>
public class Movie
{
public int MovieID { get; set; }
public string MovieName { get; set; }
public string MovieDescription { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Repeater1.DataSource = new List<Movie>
{
new Movie {MovieID = 1, MovieName = "One", MovieDescription = "One hundred"},
new Movie {MovieID = 2, MovieName = "Two", MovieDescription = "Two hundreds"},
new Movie {MovieID= 3, MovieName = "Three", MovieDescription = "Three hundreds"},
};
Repeater1.DataBind();
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
var movie = e.Item.DataItem as Movie;
var control = e.Item.FindControl("MovieDetailPanel1") as MoviePanel;
control.myMovieID = movie.MovieID;
control.myMovieDescription = movie.MovieDescription;
control.myMovieName = movie.MovieName;
}
}
Run Code Online (Sandbox Code Playgroud)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebDemo.WebForm1" %>
<%@ Register src="MoviePanel.ascx" tagname="MoviePanel" tagprefix="uc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<uc1:MoviePanel runat="server" mymovieid='<% #Eval("MovieID") %>'
mymoviename='<% #Eval("movieName") %>'
mymoviedescription='<% #Eval("movieDescription") %>'
id="MovieDetailPanel1" />
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
namespace WebDemo
{
public partial class WebForm1 : System.Web.UI.Page
{
public class Movie
{
public int MovieID { get; set; }
public string MovieName { get; set; }
public string MovieDescription { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Repeater1.DataSource = new List<Movie>
{
new Movie {MovieID = 1, MovieName = "One", MovieDescription = "One hundred"},
new Movie {MovieID = 2, MovieName = "Two", MovieDescription = "Two hundreds"},
new Movie {MovieID= 3, MovieName = "Three", MovieDescription = "Three hundreds"},
};
Repeater1.DataBind();
}
}
}
}
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="MoviePanel.ascx.cs" Inherits="WebDemo.MoviePanel" %>
<p>
<strong>Inside Control</strong>:
<asp:Label ID="MovieIDLbl" runat="server" />
<asp:Label ID="MovieNameLbl" runat="server" />
<asp:Label ID="DescriptionLbl" runat="server" />
</p>
namespace WebDemo
{
public partial class MoviePanel : System.Web.UI.UserControl
{
public int myMovieID { get; set; }
public string myMovieName { get; set; }
public string myMovieDescription { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
MovieIDLbl.Text = myMovieID.ToString();
MovieNameLbl.Text = myMovieName;
DescriptionLbl.Text = myMovieDescription;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16423 次 |
最近记录: |