Загрузка файла.Свойства файла не находятся в панели обновления, но все равно всегда возвращают false

#asp.net #file-upload #controls #return

#asp.net #загрузка файла #элементы управления #Возврат

Вопрос:

Я сталкиваюсь с этой проблемой в течение нескольких дней, после поиска в Google все еще не помогает. Кто-нибудь поможет это исправить. мой элемент управления fileupload не помещен в updatepanel, но его свойства HasFile по-прежнему всегда возвращают false.

Вот мой код

 <table style="width: 100%;">
    <tr>
        <td style="width: 200px;">
            Name
        </td>
        <td style="vertical-align: top;">
            <div style="float: left;">
                <asp:TextBox ID="txtName" runat="server" Width="500px" CssClass="text01" />
            </div>
            <div style="float: left; padding: 2px 0 0 5px;">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" CssClass="error01"
                    ErrorMessage="This field is required !" Display="Dynamic" ControlToValidate="txtName"></asp:RequiredFieldValidator>
            </div>
        </td>
    </tr>
    <tr>
        <td style="width: 200px;">
            Position
        </td>
        <td style="vertical-align: top;">
            <div style="float: left;">
                <asp:TextBox ID="txtPosition" runat="server" Width="500px" CssClass="text01" />
            </div>
            <div style="float: left; padding: 2px 0 0 5px;">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" CssClass="error01"
                    ErrorMessage="This field is required !" Display="Dynamic" ControlToValidate="txtPosition"></asp:RequiredFieldValidator>
            </div>
        </td>
    </tr>
    <tr>
        <td>
            Vietnamese Position
        </td>
        <td>
            <div style="float: left;">
                <asp:TextBox ID="txtPositionVN" runat="server" Width="500px" CssClass="text01" />
            </div>
            <div style="float: left; padding: 2px 0 0 5px;">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" CssClass="error01"
                    ErrorMessage="This field is required !" Display="Dynamic" ControlToValidate="txtPositionVN"></asp:RequiredFieldValidator>
            </div>
        </td>
    </tr>
    <tr>
        <td>
            Order
        </td>
        <td>
            <asp:DropDownList ID="ddlOrder" runat="server" Height="16px" Width="150px">
            </asp:DropDownList>
        </td>
    </tr>
    <tr>
        <td style="width: 200px;">
            Email
        </td>
        <td style="vertical-align: top;">
            <div style="float: left;">
                <asp:TextBox ID="txtEmail" runat="server" Width="500px" CssClass="text01" />
            </div>
            <div style="float: left; padding: 2px 0 0 5px;">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" CssClass="error01"
                    ErrorMessage="This field is required !" Display="Dynamic" ControlToValidate="txtEmail"></asp:RequiredFieldValidator>
            </div>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                ControlToValidate="txtEmail" CssClass="text01" Display="Dynamic" 
                ErrorMessage="Input valid email address !" 
                ValidationExpression="w ([- .']w )*@w ([-.]w )*.w ([-.]w )*"></asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
        <td style="width: 200px;">
            Mobile Phone Number
        </td>
        <td style="vertical-align: top;">
            <div style="float: left;">
                <asp:TextBox ID="txtPhone" runat="server" Width="500px" CssClass="text01" />
            </div>
            <div style="float: left; padding: 2px 0 0 5px;">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" CssClass="error01"
                    ErrorMessage="This field is required !" Display="Dynamic" ControlToValidate="txtPhone"></asp:RequiredFieldValidator>
            </div>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" 
                ControlToValidate="txtPhone" CssClass="text01" Display="Dynamic" 
                ErrorMessage="Input valid mobile phone number !" ValidationExpression="^d $"></asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
        <td style="width: 200px;vertical-align: top;">
            Address
        </td>
        <td style="vertical-align: top;">
            <div style="float: left;">
                <asp:TextBox ID="txtAdd" runat="server" Width="500px" CssClass="text01" TextMode="MultiLine" Height="200px" />
            </div>
        </td>
    </tr>
    <tr>
        <td style="vertical-align: top;">
            Image
        </td>
        <td valign="top">
            <asp:FileUpload ID="fupImage" runat="server" CssClass="text01" Width="400px" />
            <asp:Image ID="imgURL" runat="server" Width="100px" Height="100px" Visible="false" />
            <asp:Label ID="lblMessageForfupImage" runat="server" ForeColor="Red" Visible="false"></asp:Label>
        </td>
    </tr>
    <tr>
        <td />
        <td>
            <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" CssClass="text01" />
            <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdate_Click"
                CssClass="text01" Visible="False" />
            <asp:Button ID="btnReset" runat="server" Text="Reset" OnClick="btnReset_Click" 
                CssClass="text01" CausesValidation="False" />
            <asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancel_Click"
                CssClass="text01" Height="22px" CausesValidation="False" />
        </td>
    </tr>
</table>
  

И код, лежащий в основе :

 if (fupImage.PostedFile.FileName != "")
        {
            if (!Utitlties.Instance.CheckImageFileType(fupImage.PostedFile.FileName))
            {
                lblMessageForfupImage.Visible = true;
                lblMessageForfupImage.Text = "Image file only accept *.jpg, *.png, *.bmp, *.gif Extensions !";
                fupImage.Focus();
            }
            else
            {
                evt.ImageURL = Utils.Instance.SaveImage(fupImage.PostedFile.InputStream, fupImage.PostedFile.FileName, true);
                UniqueDesign.Utilities.Utitlties.Instance.DeleteFile(imgURL.ImageUrl);
            }
        }
  

когда я отключил его, возвращаемые свойства HasFile всегда имеют значение false, и

fupImage.Отправленный файл.ContentLength = -2, но у него все еще есть имя файла и тип файла.

И вот мой web.config :

 <?xml version="1.0"?>
  

Asp.Net Параметр конфигурации в Visual Studio.
Полный список настроек и комментариев можно найти в
machine.config.comments обычно находится в
Windows Microsoft.NetFrameworkvx.x Config
—>

 </appSettings>
<connectionStrings/>
<!--<location path="admin_ServicesPhotosManager.aspx">
    <system.web>
        <httpRuntime executionTimeout="3600" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>
    </system.web>
</location>-->
<system.web>
    <httpRuntime executionTimeout="3600"
                             maxRequestLength="40960"
                             minFreeThreads="8"
                             minLocalRequestFreeThreads="4"
                             appRequestQueueLimit="5000"
                             enableKernelOutputCache="true"
                             enableVersionHeader="true"
                             requireRootedSaveAsPath="true"
                             enable="true"
                             shutdownTimeout="90"
                             delayNotificationTimeout="5"
                             waitChangeNotification="0"
                             maxWaitChangeNotification="0"
                             enableHeaderChecking="true"
                             sendCacheControlHeader="true"
                             apartmentThreading="false"/>
    <!-- 
                    Set compilation debug="true" to insert debugging 
                    symbols into the compiled page. Because this 
                    affects performance, set this value to true only 
                    during development.
            -->
    <compilation debug="true">
        <assemblies>
            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="FileUploadLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=AF961ECE0B692DFB"/>
        </assemblies>
    </compilation>
    <!--
                    The <authentication> section enables configuration 
                    of the security authentication mode used by 
                    ASP.NET to identify an incoming user. 
            -->
    <authentication mode="Windows"/>
    <!--
                    The <customErrors> section enables configuration 
                    of what to do if/when an unhandled error occurs 
                    during the execution of a request. Specifically, 
                    it enables developers to configure html error pages 
                    to be displayed in place of a error stack trace.

            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                    <error statusCode="403" redirect="NoAccess.htm" />
                    <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
    <pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false">
        <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </controls>
    </pages>
    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="GET" type="darrenjohnstone.net.FileUpload.UploadProgressHandler, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb" path="UploadProgress.ashx"/>
        <add verb="GET" type="darrenjohnstone.net.FileUpload.SQLFileDownloadHandler, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb" path="DownloadFile.ashx"/>
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="upload_module" type="darrenjohnstone.net.FileUpload.UploadModule, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb"/>
    </httpModules>
</system.web>
<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="WarnAsError" value="false"/>
        </compiler>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="OptionInfer" value="true"/>
            <providerOption name="WarnAsError" value="false"/>
        </compiler>
    </compilers>
</system.codedom>
<!-- 
            The system.webServer section is required for running ASP.NET AJAX under Internet
            Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="1073741824">
            </requestLimits>
        </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
        <remove name="ScriptModule"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <remove name="upload_module" />
        <add name="upload_module" type="darrenjohnstone.net.FileUpload.UploadModule, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb" />
    </modules>
    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory"/>
        <remove name="ScriptHandlerFactoryAppServices"/>
        <remove name="ScriptResource"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UploadProgress" verb="GET" type="darrenjohnstone.net.FileUpload.UploadProgressHandler, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb" path="UploadProgress.ashx" />
        <add name="FileDownload" verb="GET" type="darrenjohnstone.net.FileUpload.SQLFileDownloadHandler, fileuploadlibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=af961ece0b692dfb" path="DownloadFile.ashx" />
    </handlers>
</system.webServer>
<runtime>
    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>
  

Комментарии:

1. привет, Эйб, я отредактировал свой пост. спасибо за вашу заботу. надеюсь, мы сможем это исправить. заранее спасибо

Ответ №1:

Я наткнулся на этот вопрос, когда у меня возникла эта проблема, и решил, что также опубликую, в чем заключалась моя проблема и решение.

Убедитесь, что размер файла, который вы пытаетесь загрузить, превышает 0 байт. Я пытался загрузить несколько пустых текстовых файлов для тестирования, и у каждого файла было правильно установлено FileName свойство, но HasFile всегда было false. Добавление некоторого текста к файлам придало ему некоторый контент, и файл смог быть успешно загружен.

Ответ №2:

Тогда где именно находится ваша UpdatePanel? Вы пытаетесь отправить форму, которая находится в updatepanel, но также имеет элемент управления fileupload, которого нет?

Я не думаю, что это тоже сработает.

Вы можете использовать версию FileUpload для AJAX control toolkit или использовать что-то другое, например Uploadify, который является плагином jquery.

Комментарии:

1. Привет, Джек, спасибо за твой ответ, но я не использую никакую UpdatePanel на своем веб-сайте, я редактирую свой пост, добавляя свой код.

2. я думаю, причина в том, что я использую FileUPloadLibrary Даррена, когда я тестировал свой Веб без контроля Даррена, он работал нормально.