点击上传按钮

时间:2017-11-23 10:34:40

标签: c# asp.net updatepanel datalist

我有一个页面,我正在使用更新面板,Datalist和文件上传。 我正在使用Visual Studio 2010

我的文件上载在数据列表中,我使用动态表绑定数据列表以重复文件上传控制。

请参阅下面的布局图片:

enter image description here

此处主要上方红色高亮显示边框显示重复数据列表,并且我有文件上传控件。

现在数据列表位于更新面板中,因此文件上传无法正常工作所以在数据列表中我已经采用了另一个更新面板来进行文件上传工作,这也正常工作但点击了绿色添加按钮问题开始出现

  

无法在触发器中找到ID为“上传”的控件   UpdatePanel'UpdatePanel1'。

下面是我的html代码,请记住我只是在出现问题的部分:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="Uppanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:DataList ID="dtcustomerregistration" runat="server" RepeatDirection="Vertical"
            Width="100%" OnItemCommand="dtcustomerregistration_ItemCommand">
            <ItemTemplate>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <label class="col-md-4 control-label" for="Pic">
                            Upload Image:</label>

                        <asp:FileUpload ID="Pic" runat="server" accept="image/gif, image/jpg, image/jpeg, image/png" />

                        <asp:Button ID="Upload" CommandArgument='<%#Eval("uniqueId") %>' CommandName="Edit"
                            runat="server" Text="Upload" OnClick="Upload_Click" />
                        <asp:Label ID="StatusLabel" runat="server" CssClass="requiredvalidate" Text=""></asp:Label>
                        <asp:HiddenField ID="hdimagename" runat="server" Value='<%#Eval("UploadImage") %>' />

                        <asp:Image ID="imgpicuploaded" runat="server" ImageUrl='<%#System.Configuration.ConfigurationManager.AppSettings["ShowImagetemppath"].ToString().Replace("~/","") +Eval("UploadImage").ToString() %>'
                            Height="50px" />
                        </div>
                    </ContentTemplate>
                    <Triggers>
                        <asp:PostBackTrigger ControlID="Upload" />
                    </Triggers>
                </asp:UpdatePanel>
            </ItemTemplate>
        </asp:DataList>
        <asp:ImageButton ID="imgplus" runat="server" ImageUrl="~/Image/Add.png" Height="50px" OnClick="imgplus_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

我在imgplus点击事件上的代码如下。

protected void imgplus_Click(object sender, ImageClickEventArgs e)
{
int n = (int)ViewState["n"];
n = n + 1;
BindData(n);
}

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["data"] = null;
BindData(0);
}
}
public void BindData(int n)
{
DataTable dt = new DataTable();
dt.Columns.Add("uniqueId");
dt.Columns.Add("Invoice");
dt.Columns.Add("ReturnType");
dt.Columns.Add("ItemNumber");
dt.Columns.Add("ReturnQTY");
dt.Columns.Add("UnitofMeasure");
dt.Columns.Add("CreditPer");
dt.Columns.Add("ReasonCode");
dt.Columns.Add("InvoiceNumber");
dt.Columns.Add("Ordernumber");
dt.Columns.Add("Notes");
dt.Columns.Add("UploadImage");

if (ViewState["data"] == null)
{
dt = bindemptydata(dt, n);
}
else
{
foreach (DataListItem dli in dtcustomerregistration.Items)
{
HiddenField lblid = (HiddenField)dli.FindControl("lblid");
DropDownList RetCred = (DropDownList)dli.FindControl("RetCred");
DropDownList returntype = (DropDownList)dli.FindControl("returntype");
TextBox ItemNumber = (TextBox)dli.FindControl("ItemNumber");
TextBox ReturnQty = (TextBox)dli.FindControl("ReturnQty");
DropDownList Unit = (DropDownList)dli.FindControl("Unit");
TextBox Credit = (TextBox)dli.FindControl("Credit");
DropDownList ReasonCode = (DropDownList)dli.FindControl("ReasonCode");
TextBox Invoice = (TextBox)dli.FindControl("Invoice");
TextBox OrderNumber = (TextBox)dli.FindControl("OrderNumber");
TextBox Notes = (TextBox)dli.FindControl("Notes");
Image imgpicuploaded = (Image)dli.FindControl("imgpicuploaded");
HiddenField hdimagename = (HiddenField)dli.FindControl("hdimagename");
DataRow dr = dt.NewRow();

if (lblid.Value != "")
{
dr["uniqueId"] = lblid.Value;
}
else
{
dr["uniqueId"] = n;
}
dr["Invoice"] = RetCred.SelectedValue;
dr["ReturnType"] = returntype.SelectedValue;
dr["ItemNumber"] = ItemNumber.Text;
dr["ReturnQTY"] = ReturnQty.Text;
dr["UnitofMeasure"] = Unit.SelectedValue;
dr["CreditPer"] = Credit.Text;
dr["ReasonCode"] = ReasonCode.SelectedValue;
dr["InvoiceNumber"] = Invoice.Text;
dr["Ordernumber"] = OrderNumber.Text;
dr["Notes"] = Notes.Text;
dr["UploadImage"] = hdimagename.Value;
dt.Rows.Add(dr);
}

dt = bindemptydata(dt, n);
}
BindDatalist(dt);
ViewState["n"] = n;
}

public DataTable bindemptydata(DataTable dt, int n)
{
DataRow dr = dt.NewRow();
dr["uniqueId"] = n;
dr["Invoice"] = "Credit";
dr["ReturnType"] = "0";
dr["ItemNumber"] = "";
dr["ReturnQTY"] = "";
dr["UnitofMeasure"] = "Each";
dr["CreditPer"] = "100%";
dr["ReasonCode"] = "0";
dr["InvoiceNumber"] = "";
dr["Ordernumber"] = "";
dr["Notes"] = "";
dr["UploadImage"] = "";
dt.Rows.Add(dr);

return dt;
}
public void BindDatalist(DataTable dt)
{
dtcustomerregistration.DataSource = dt;
dtcustomerregistration.DataBind();// Here I am receiving error
ViewState["data"] = dt;
}    

上面我给出了完整的代码来创建动态数据表并将其与数据列表绑定,以便在点击imgplus按钮时重复数据列表 但是点击按钮我收到错误:

以下是错误图片。 enter image description here

我该如何解决这个问题?

单击Imgplus按钮,我收到DataList中存在的上传按钮问题。

还有一件事,如果我通常点击ImgPlus按钮而不使用上传按钮,那么它将重复DataList控件而不会出现任何问题,但万一我使用了上传点击按钮存在于DataList中然后在我点击Imgplus按钮后,我收到错误:

  

无法在触发器中找到ID为“上传”的控件   UpdatePanel'UpdatePanel1'。

2 个答案:

答案 0 :(得分:0)

使用另一个UpdatePanel upButton围绕您的按钮:

<asp:UpdatePanel ID="upButton" runat="server" UpdateMode="Conditional">
    <asp:Button ID="Upload" CommandArgument='<%#Eval("uniqueId") %>' CommandName="Edit"
        runat="server" Text="Upload" OnClick="Upload_Click" />
</ContentTemplate>

然后在按钮点击方法Uppanel.Update();中调用主UpdatePanel Upload_Click

注意:删除UpdatePanel ID="UpdatePanel1"

答案 1 :(得分:0)

因为此代码而发生错误:

<Triggers>
         <asp:PostBackTrigger ControlID="Upload" />
</Triggers>

当你在嵌套面板内时,你使用了PostBackTrigger,而你却在使用它 在这种情况下,AsyncPostBackTrigger符合this页。

因此,请将该代码段更改为:

<Triggers>
         <asp:AsyncPostBackTrigger ControlID="Upload" />
</Triggers>

或将UpdateMode的{​​{1}}设置为UpdatePanel1