C# 中继器控件未使用ItemCommand更新
我有一个C# 中继器控件未使用ItemCommand更新,c#,asp.net,repeater,C#,Asp.net,Repeater,我有一个中继器控件,现在我只需在单击相关按钮时更改文本框中的文本即可。 然而,这并没有发生 以下是我目前的代码: <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate>
中继器
控件,现在我只需在单击相关按钮时更改文本框中的文本即可。然而,这并没有发生 以下是我目前的代码:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
<asp:Repeater ID="rptPdfList" runat="server" OnItemCommand="rptPdfList_ItemCommand">
<HeaderTemplate>
<table>
<tr>
<td>File Name</td>
<td></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblName" runat="server" Text=<%#Eval("FileName") %>></asp:Label>
</td>
<td>
<asp:Button ID="btnLoad" runat="server" Text="Load" CommandName="LoadDoc"/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<br />
<asp:Button ID="btnLoad" runat="server" Text="Load" OnClick="btnLoad_Click" /><br />
<iframe runat="server" id="pdfHolder"></iframe>
<br />
<asp:Label ID="lblTest" runat="server" Text="Label"></asp:Label>
</div>
</ContentTemplate>
</asp:UpdatePanel>
文件名
代码隐藏:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GetFiles();
}
private void GetFiles()
{
rptPdfList.DataSource = Pdf();
rptPdfList.DataBind();
}
protected void rptPdfList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
Label lblName = (Label)e.Item.FindControl("lblName");
switch (e.CommandName)
{
case "LoadDoc":
//xpdfHolder.Attributes.Add("src", "PDF/" + lblName.Text);
lblTest.Text = "test";
lblName.Text = "oops";
break;
}
}
public static List<PdfList> Pdf()
{
string pdfDir = HostingEnvironment.MapPath("~") + @"PDF\";
DirectoryInfo directory = new DirectoryInfo(pdfDir);
FileInfo[] pdfFiles = directory.GetFiles("*.pdf", SearchOption.AllDirectories);
List<PdfList> pdfLists = pdfFiles.Select(pdfFile => new PdfList
{
FileName = pdfFile.Name
}).ToList();
return pdfLists;
}
}
public class PdfList
{
public string FileName { get; set; }
}
public分部类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
GetFiles();
}
私有void GetFiles()
{
rptPdfList.DataSource=Pdf();
rptPdfList.DataBind();
}
受保护的void rptPdfList_ItemCommand(对象源,RepeaterCommandEventArgs e)
{
if(e.Item.ItemType!=ListItemType.Item&&e.Item.ItemType!=ListItemType.AlternatingItem)返回;
Label lblName=(Label)e.Item.FindControl(“lblName”);
开关(例如CommandName)
{
案例“LoadDoc”:
//Add(“src”,“PDF/”+lblName.Text);
lblTest.Text=“测试”;
lblName.Text=“oops”;
打破
}
}
公共静态列表Pdf()
{
字符串pdfDir=HostingEnvironment.MapPath(“~”+@“PDF\”;
DirectoryInfo目录=新的DirectoryInfo(pdfDir);
FileInfo[]pdfFiles=directory.GetFiles(“*.pdf”,SearchOption.AllDirectories);
列出pdfLists=pdfFiles。选择(pdfFile=>newpdflist
{
FileName=pdfFile.Name
}).ToList();
返回pdfLists;
}
}
公共类PdfList
{
公共字符串文件名{get;set;}
}
有人知道我哪里出错了吗
编辑,添加所有代码我正在像这样绑定您的中继器,它对我来说很好,只需将绑定功能放在
if (!Page.IsPostBack)
条件:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
using (DataClassesDataContext dc = new DataClassesDataContext())
{
var v = (from s in dc.t_employees select s).ToList();
rptPdfList.DataSource = v;
rptPdfList.DataBind();
}
}
}
protected void rptPdfList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
Label lblName = (Label)e.Item.FindControl("lblName");
switch (e.CommandName)
{
case "LoadDoc":
//xpdfHolder.Attributes.Add("src", "PDF/" + lblName.Text);
lblTest.Text = "test";
lblName.Text = "oops";
break;
}
}
更改此项:
protected void Page_Load(object sender, EventArgs e)
{
GetFiles();
}
为此:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
GetFiles();
}
您每次都在调用
GetFiles()
,因此它总是返回到初始状态。请显示您的绑定代码。绑定中继器在哪里?哇。。。我现在对我的编程感到不安全^^哈哈,谢谢你的指点