gpt4 book ai didi

c# - 中继器内部的用户控制

转载 作者:可可西里 更新时间:2023-11-01 07:55:43 26 4
gpt4 key购买 nike

我在转发器中有一个 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;
}

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>

这里发生了一些非常奇怪的事情。这些值未传递给 UserControl。但是,如果我将标签放在用户控件下方并使用 Eval() 设置文本有用。您可能认为用户控件可能是问题所在。但是,如果我手动输入内容,请说代替 <%# Eval("movieName") %>它被传递给用户控件并显示出来。

我不知道!如果问题出在 Eval() 标签上,那么文本也不应该得到。或者,如果问题出在 UserControl 上,则我的手册文本不应通过。我不知道为什么 Eval() 的值没有到达 UserControl。

最佳答案

您的代码运行良好;我对其进行了测试(请参阅页面底部)。 最坏的情况是您可以尝试在 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;
}
}

enter image description here

这是我如何测试你的原始问题

<%@ 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;
}
}
}

关于c# - 中继器内部的用户控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com