FileUpload的Update面板中不会触发Button事件

时间:2013-09-04 03:52:40

标签: c# asp.net asp.net-ajax updatepanel ajaxcontroltoolkit

我有一个asp.net网页表单页面也使用母版页。

这是一个显示一些文字并有表格的简单页面,此页面还允许用户上传.doc,.docx&中的简历。 pdf格式。

此代码的问题是我无法触发 出于某种原因<asp:Button ID="btnUploadCV" runat="server" Text="Upload" CssClass="btnUpload" onclick="btnUploadCV_Click"/>

<%@ Page Title="" Language="C#" MasterPageFile="~/en/SiteMasterPage.master" AutoEventWireup="true" CodeFile="career.aspx.cs" Inherits="career" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
        <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"></asp:Content>
        <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
            <!-- Content Page-->
            <!-- page content wrapper -->
            <div id="page-content-area" class="page-content-area">
                <div id="pg-left-bar" class="pg-left-bar">
                    <div class="page-title">
                         <h5><asp:Label ID="lblPageTitle" CssClass="page-title-lbl" runat="server" Text="Introduction"></asp:Label></h5>

                    </div>
                    <div class="page-text">
                        <asp:Label ID="lblPageContents" runat="server" Text=""></asp:Label>
                    </div>
                    <div class="career-form-wrapper">
                        <!-- UpdatePanel -->
                        <asp:UpdatePanel ID="updPnlArticles" runat="server" UpdateMode="Conditional">
                            <ContentTemplate>
                                <asp:Panel ID="pnlCareerForm" runat="server">
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper"> <span class="row-req">*</span>

                                            <asp:Label ID="lblFirstName" runat="server" CssClass="row-label" Text="First Name:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtFirstName" runat="server" CssClass="row-input"></asp:TextBox>
                                        <asp:RequiredFieldValidator ID="rfFN" runat="server" ValidationGroup="Careers" ErrorMessage="*" CssClass="row-validate" ControlToValidate="txtFirstName"></asp:RequiredFieldValidator>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper"> <span class="row-req">*</span>

                                            <asp:Label ID="lblFamilyName" runat="server" CssClass="row-label" Text="Family Name:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtFamilyName" runat="server" CssClass="row-input"></asp:TextBox>
                                        <asp:RequiredFieldValidator ID="rfLN" runat="server" ValidationGroup="Careers" ErrorMessage="*" CssClass="row-validate" ControlToValidate="txtFamilyName"></asp:RequiredFieldValidator>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper"> <span class="row-req">*</span>

                                            <asp:Label ID="lblEmail" runat="server" CssClass="row-label" Text="Email:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtEmail" runat="server" CssClass="row-input"></asp:TextBox>
                                        <asp:RequiredFieldValidator ID="rfvEmail" runat="server" ValidationGroup="Careers" ErrorMessage="*" CssClass="row-validate" ControlToValidate="txtEmail"></asp:RequiredFieldValidator>
                                        <asp:RegularExpressionValidator ID="revEmail" runat="server" ErrorMessage="*" CssClass="row-validate" ControlToValidate="txtEmail" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ValidationGroup="Careers"></asp:RegularExpressionValidator>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper">
                                            <asp:Label ID="lblPhone" runat="server" CssClass="row-label" Text="Phone Number:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtPhone" runat="server" CssClass="row-phone" Text=""></asp:TextBox>
                                        <asp:RegularExpressionValidator ID="revPhone" runat="server" ErrorMessage="*" ValidationGroup="Careers" ControlToValidate="txtPhone" ValidationExpression="^([\+]?[0-9]{1,3}[\s.-][0-9]{1,12})([\s.-]?[0-9]{1,4}?)$"></asp:RegularExpressionValidator>
                                        <div class="tooltip tooltip-override" title="Accepts local format (eg. 04 1234567, 050 1234567 or 04-1234567, 050-1234657)<br />and international format (eg. +971 41234567, +971-41234567 ).<br />Also accepts an optional extention of up to four digits (eg. 04 1234567 289 or +974 41234567 289)">
                                            <asp:Image ID="imgtooltip" CssClass="tooltip-img" runat="server" ImageUrl="~/images/tooltipgreen.png" />
                                        </div>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper">
                                            <asp:Label ID="lblFax" runat="server" CssClass="row-label" Text="Fax Number:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtFax" runat="server" CssClass="row-input"></asp:TextBox>
                                        <asp:RegularExpressionValidator ID="revFax" runat="server" ErrorMessage="*" ValidationGroup="Careers" ControlToValidate="txtFax" ValidationExpression="^([\+]?[0-9]{1,3}[\s.-][0-9]{1,12})$"></asp:RegularExpressionValidator>
                                        <div class="tooltip tooltip-override" title="Accepts local format (eg. 04 1234567 or 040-1234567)<br />and international format (eg. +974 41234567 or +974-41234567)">
                                            <asp:Image ID="Image1" CssClass="tooltip-img" runat="server" ImageUrl="~/images/tooltipgreen.png" />
                                        </div>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper">
                                            <asp:Label ID="lblAddress" runat="server" CssClass="row-label" Text="Address:"></asp:Label>
                                        </div>
                                        <asp:TextBox ID="txtAddress" runat="server" CssClass="row-input-multiline" TextMode="MultiLine"></asp:TextBox>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper"> <span class="row-req">*</span>

                                            <asp:Label ID="lblCountry" runat="server" CssClass="row-label" Text="Country:"></asp:Label>
                                        </div>
                                        <asp:DropDownList ID="ddCountry" runat="server" CssClass="row-dd"></asp:DropDownList>
                                        <asp:CascadingDropDown ID="csdCountry" runat="server" Category="Country" TargetControlID="ddCountry" PromptText="-- Select --" LoadingText="[Loading Countries...]" ServiceMethod="FetchCountries" ServicePath="~/wsCountryCity.asmx" PromptValue="0"></asp:CascadingDropDown>
                                        <asp:RequiredFieldValidator ID="rfCountry" ValidationGroup="Careers" ControlToValidate="ddCountry" CssClass="row-validate" InitialValue="0" runat="server" ErrorMessage="*"></asp:RequiredFieldValidator>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper">
                                            <asp:Label ID="lblCity" runat="server" CssClass="row-label" Text="City:"></asp:Label>
                                        </div>
                                        <asp:DropDownList ID="ddCity" runat="server" CssClass="row-dd"></asp:DropDownList>
                                        <asp:CascadingDropDown ID="csdCity" runat="server" Category="City" TargetControlID="ddCity" ParentControlID="ddCountry" PromptText="-- Select --" LoadingText="[Loading Cities...]" ServiceMethod="FetchCities" ServicePath="~/wsCountryCity.asmx" PromptValue="0"></asp:CascadingDropDown>
                                    </div>
                                    <div class="row-form">
                                        <div class="row-lbl-wrapper"> <span class="row-req">*</span>

                                            <asp:Label ID="Label1" runat="server" CssClass="row-label" Text="CV:"></asp:Label>
                                        </div>
                                        <asp:FileUpload ID="FileUpload1" runat="server" CssClass="fileUpload" />
                                        <div id="dFileUpload1" class="btnUploadHack">Browse</div>
                                        <asp:Button ID="btnUploadCV" runat="server" Text="Upload" CssClass="btnUpload" onclick="btnUploadCV_Click" />
                                        <asp:RequiredFieldValidator ID="rfvF1" runat="server" ValidationGroup="Careers" ErrorMessage="*" CssClass="row-validate" ControlToValidate="FileUpload1"></asp:RequiredFieldValidator>
                                        <asp:Label ID="lblImageMSG" runat="server" Text=""></asp:Label>
                                    </div>
                                    <div class="contactus-row">
                                        <asp:Button ID="btnSave" runat="server" CssClass="btnContactUsSave" Text="Send Message" onclick="btnSave_Click" ValidationGroup="Careers" />
                                    </div>
                                </asp:Panel>
                                <asp:Panel ID="pnlCareerMSG" runat="server"></asp:Panel>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                        <!-- UpdatePanel -->
                    </div>
                </div>
                <div class="pg-right-bar">
                    <asp:Image ID="imgSideBanner" runat="server" />
                </div>
            </div>
            <!-- page content wrapper -->
            <!-- Content Page-->
        </asp:Content>

背后的代码

    protected void btnUploadCV_Click(object sender, EventArgs e)
    {

// code is here
    }

到目前为止,我无法弄清楚是什么阻挡了射击内部的任何按钮。是的我甚至做了一个简单的按钮测试,即使没有开火。

enter image description here

我不确定是否是创建问题的验证或更新面板。

我尝试使用不起作用的Trigger

我尝试过设置

    <asp:Button ID="btnUploadCV" runat="server" Text="Upload" CssClass="btnUpload" onclick="btnUploadCV_Click" CausesValidation="false" />

protected void btnUploadCV_Click(object sender, EventArgs e)
{
  Page.Validate();
if (Page.IsValid == true)
 {

 //  your code  here

   }
}

我的问题是,由于某种原因,甚至没有输入按钮的代码块。

只是为了进一步添加我正在使用国家和城市的级联下拉列表我不确定是否会导致任何问题我也使用两个面板一个具有表单控件并且在成功提交后我隐藏了这个面板&amp;使用UpdatePanel向所有此代码显示成功消息的另一个面板。

我看到的唯一方法就是上传所有文件主表单按钮Send Message,而不是为所有文件上传控件设置单独的按钮

更新:我也试过这个approach,即使这不起作用

2 个答案:

答案 0 :(得分:2)

请理解概念

更新面板用于部分回发,今天我们称之为AJAX 但是AJAX不能用于将文件上传到服务器 AJAX使用不支持文件上载的xmlHttpRequest。

所以,不要认为这是微软的一个错误。即使在今天,我们也没有任何javascript库可以使用AJAX支持FileUpload。您在互联网上找到的所有AJAX文件上载程序都使用Flash:)

这是协议的限制。使用任何其他jquery插件上传文件。更新面板不适用于此。

答案 1 :(得分:2)

FileUpload控件不适用于异步回发。要在您的应用程序中使用此功能,请按照以下步骤操作

1。)在页面上放置<asp:ScriptManager />

如果您在应用程序中使用母版页并且您的网页使用母版页,请将脚本管理器放在母版页中。如果您不希望母版页具有脚本管理器,您也可以将脚本管理器放在特定的网页上。

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

2。)在此之后,在“更新”面板中为按钮<Triggers>添加btnUploadCV

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

其余的上传按钮OnClick处理程序如下所示:

protected void btnUploadCV_Click(object sender, EventArgs e)
    {
            if (FileUpload1.HasFile)
            {                
               fileName = FileUpload1.FileName;
               FileUpload1.SaveAs("~/UploadedData/" + fileName);
               ... 
            }
    }