【问题标题】:Repeater control not updating with ItemCommand中继器控件未使用 ItemCommand 更新
【发布时间】:2012-11-16 18:19:33
【问题描述】:

我有一个Repeater 控件,现在我只需要在单击相关按钮时更改文本框中的文本。
然而,这并没有发生。

到目前为止,这是我的代码:

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

有人知道我哪里出错了吗?

编辑,添加所有代码

【问题讨论】:

  • 请出示您的绑定代码。您在哪里绑定中继器?

标签: c# asp.net repeater


【解决方案1】:

改变这个:

protected void Page_Load(object sender, EventArgs e)
    {
        GetFiles();
    }

到这里:

protected void Page_Load(object sender, EventArgs e)
    {
if (!IsPostBack)
        GetFiles();
    }

您每次都调用GetFiles(),所以它总是返回到初始状态。

【讨论】:

  • 哇...我现在对我的编程感到不安全^^哈哈谢谢你的指出
【解决方案2】:

我正在像这样绑定你的中继器,它对我来说很好,只需将你的绑定函数放入

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多