【问题标题】:Using checkbox inside a repeater control在中继器控件中使用复选框
【发布时间】:2011-12-15 00:28:54
【问题描述】:

我从昨天开始就一直在尝试这样做,但想不出解决方案。 我有一个包含复选框和文件上传的转发器,该转发器根据我的表格内容重复多次。当文件上传下方的复选框被选中时,它不应该检查文件上传。我想不出任何办法来做到这一点。有任何想法吗?这是代码。

班级:

protected void UploadButton_Click(object sender, EventArgs e)
{
    String savePath = @"~/files/";
    try
    {
        foreach (RepeaterItem item in rptVrijstellingen.Items)
        {               
            FileUpload file=(FileUpload)item.FindControl("FileUpload1");
            HiddenField uid = (HiddenField)item.FindControl("hiddenid");
            CheckBox ch = (CheckBox)item.FindControl("CBupload");
            if(ch.Checked)
                Response.Write("checked");
            else
            {
                if (file.HasFile)
                {
                  String fileName = file.FileName;
                  savePath += fileName;
                  file.SaveAs(Server.MapPath(savePath + fileName));
                  tblBijlage s = new tblBijlage();
                  s.bijlageTitel = fileName;
                  s.bijlageURL = savePath;
                  s.bijlageType = "1";
                  s.fk_externvakID = Convert.ToInt16(uid.Value);
                  BLLstudent.insertFile(s);
                }
                else
                  throw new Exception("Gelieve bij alle vakken een file toe te voegen of gegeven aan mevrouw Van Orlé aan te vinken en een afspraak te maken.");
             }
             Response.Redirect("s_student_Ovrijstellingen.aspx");
          }
      }
      catch (Exception ex)
      {
          UploadStatusLabel.Text = ex.Message;                  
      }
}

观点:

<!-- language: xml -->
<asp:Repeater ID="rptVrijstellingen" runat="server">
   <HeaderTemplate></HeaderTemplate>
   <ItemTemplate>
      <h2><%# Eval("tblExternVak.ExternvakNaam") %></h2>
      <asp:HiddenField ID="hiddenid" Value='<%# Eval("tblExternVak.pk_externvakID") %>' runat="server" />       
      <h4>Selecteer een bestand om te uploaden:</h4>
      Gelieve het bestand de naam te geven van het overeenkomstige vak om de verwerking vlot te laten verlopen.
       <br /><br />  <br />
       <asp:FileUpload id="FileUpload1" runat="server"></asp:FileUpload>
       <br />
       <asp:CheckBox id="CBupload" runat="server" /><asp:Label id="lblUpload" runat="server"> Geleverd aan Mevrouw Van Orlé</asp:Label>
       <hr />
    </ItemTemplate>
    <SeparatorTemplate><hr /></SeparatorTemplate>
</asp:Repeater>
<asp:Label id="UploadStatusLabel" runat="server" ForeColor="Red"></asp:Label>
<br /><br />
<asp:Button id="UploadButton" Text="volgende > " OnClick="UploadButton_Click" runat="server"></asp:Button>  

你可以看到它只是一个逻辑问题......谁能给我一个如何解决这个问题的例子?

【问题讨论】:

  • 尝试为 CheckBox 控件设置EnableViewState="true"
  • 那么复选框控制每次上传吗? o.O
  • 您的 Response.Redirect 位于 foreach 内,所以不会;这是否意味着您第一次通过循环被重定向?这是你得到的错误吗?如果不是,代码运行时您的错误是什么?
  • 我没有收到错误 tbh the response.redirect 不是我的问题我只是无法将复选框链接到我的检查是否存在上传文件,我希望能够在没有文件的情况下提交检查复选框被检查
  • 为什么需要一个复选框来控制是否应该处理文件上传? FileUploads 总是从空白开始,所以用户必须手动选择一个文件来填充它。你认为如果他们遇到了选择文件的麻烦,那么他们希望它被处理。该文件仍然会以任何一种方式上传到服务器(使用客户端和服务器带宽),因此让他们必须打开第二个元素才能使其工作真的没有意义。听起来你太混淆了界面。除非,也许您还想阅读该文件,但用它做其他事情?

标签: c# asp.net repeater


【解决方案1】:

您可能在页面加载期间将项目绑定到转发器。你在检查 PostBack 吗?

我认为正在发生的事情是,当您单击按钮时,页面会重新加载,并且转发器会充满您的数据,从而覆盖您所做的复选框选择。只需确保您在页面加载中执行以下操作即可:

if(!Page.IsPostBack)
{
    //Fill repeater with items here
}

现在,当您在单击按钮后读出中继器项目时,您应该会看到复选框的实际值,而不是始终为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多