Repeater控件不使用ItemCommand更新

时间:2012-11-16 09:25:29

标签: c# asp.net repeater

我有一个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; }
}
有谁知道我哪里出错了?

编辑,添加了所有代码

2 个答案:

答案 0 :(得分:0)

我这样绑定你的转发器,它对我来说很好,只需将你的绑定功能放在

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

答案 1 :(得分:0)

改变这个:

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

到此:

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

您每次都在调用GetFiles(),因此它始终返回初始状态。