WebForm 中的 AsyncFileUpload 问题(在服务器中发布后)- "AjaxControlToolkit.Properties.Resources.resources" 未找到

Problem with AsyncFileUpload in WebForm (after being published in server) - "AjaxControlToolkit.Properties.Resources.resources" not found

我正在使用 ASP.NET - Framework 3.5 创建的解决方案。

此解决方案有一个包含多个 UpdatePanelsTabContainer and a single AsyncFileUpload 控件的 WebForm( 来自 Site.master 的子项。

在本地(即在开发人员环境中),WebForm 加载并成功运行,但是,一旦在不同的服务器上发布了 WebForm - 选择文件时(通过使用AsyncFileUpload控件),显示以下消息:

Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "AjaxControlToolkit.Properties.Resources.resources" was correctly embedded or linked into assembly "AjaxControlToolkit" at compile time, or that all the satellite assemblies required are loadable and fully signed.

在我的本地开发环境中,不会出现此错误,并且可以按预期选择和处理文件。


在搜索这个错误的原因时,大部分的建议是:

我也试过:

还有什么可以检查丢失的资源and/or导致此错误的原因并解决此问题?

首先,您根本不想在 bin 文件夹中“放置”任何东西。首先,如果您从菜单 build->clean solution 中执行一个操作,那么所有 bin 文件和文件夹都会从 bin 中删除。因此,当您进行编译时,您的项目需要在 bin 文件夹中没有任何内容的情况下工作、编译和 运行,或者当您进行重建时更重要,当然更重要的是当您创建部署时,然后无论如何,bin 文件夹中的内容是 re-created。因此,任何将 .dll 文件放入 bin 文件夹的想法不仅是一个坏主意,而且毫无结果,无论如何都不应该这样做。

母版页上的脚本管理器。这很好,值得推荐,这样您就不必一页一页地做这个了。

但是,您应该告诉脚本管理器要组合和加载哪些脚本。(但不同的问题 - 因为这不应该影响 ajax 工具包。

你要看的是web.config文件。您需要包括您正在使用的 ajax 工具包组件。

这样说:

然后在页面部分,您应该have/see这样:

<pages controlRenderingCompatibilityVersion="4.0">
  <namespaces>
    <add namespace="System.Web.Optimization" />
  </namespaces>
  <controls>
    <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />

    <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
  </controls>
</pages>

IN 上面 - ajax takeit 标签前缀是必需的(这可以在你的网络表单上启用更多的 ajax 控件的拖放,但我确实有上面的 - 所以让我们假设你需要它

你还应该see/have这个:

<httpHandlers>
  <add verb="*" path="AjaxFileUploadHandler.axd" 
     type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit" />
</httpHandlers>

以上为系统web下

现在在下一节中,我们有:

</handlers>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2048000000" />
  </requestFiltering>
</security>

以上将设置最大文件大小。现在 ajax 工具包会“分块”——所以理论上可能不需要上述请求限制——但它似乎确实会影响文件 up-load 大小。

上面,我用的是AjaxFileUpload,你用的是AsyncFileUpload。

它们很相似,但 AjaxFileUpload 允许多个文件并显示此屏幕:​​

此外,不清楚您是如何安装 ajax 工具包的。我假设 nuget?

我想代替生产发布,您可能想要假脱机处理 IIS 和 运行 的真实完整副本,例如某个 VM,然后尝试发布到该 VM。

我的意思是,在开发箱上?好吧,您在厨房水槽下安装这个那个以及所有东西可能已经超过 5 年了。这意味着任何东西都可以工作并且 运行 在您的本地盒子上 - 因为您的演出和演出的软件和参考资料以及多年来没有建立起来的东西。因此,这样的本地测试与发布到真实站点意味着本地测试根本没有多大意义。

此外,我想有人可能想看看您的项目参考资料。

我see/have这个:

可以肯定的是,仅添加 ajax 工具包引用就会导致上述所有 4 个引用发生。

你也没有提到你是如何进行发布的。我认为这是一个 asp.net 网络项目,而不是 asp.net 网站 - 因为它“设置”发布的能力有限。

总而言之,ajax工具包是否与 nuget 一起安装,或者您是如何安装和引用该工具包的?

我无法用 AsyncFileUpload 控件解决问题,但是,作为好的一面,在搜索如何解决这个问题时,我尝试了 再次更改代码并使用FileUploadUpdatePanel控件。

我遇到了 this entry - in spanish,它链接了另一个页面上的另一个线程,其中解释了如何使用 FileUploadUpdatePanel 控件。

链接的线程是这样的:Using FileUpload Control inside ASP.Net AJAX UpdatePanel Control

我更改了我的代码(而不是使用 AsyncFileUpload)以使用 FileUploadUpdatePanel 中,但是,这里有问题:

For select and send the file to the server side, the Button that sends the file (once selected with the FileUpload control) must have its own UpdatePanel with its respective Triggers tag.


示例:我在这里使用 LinkButton 控件,但是 Button 控件应该可以完美运行。

在 .aspx 中:

<asp:UpdatePanel ID="updPnlbtnFileUploadDevols" runat="server">
    <ContentTemplate>
        <asp:LinkButton ID="btnLoadClassFileDevoluciones" runat="server" Text="Cargar Archivo" 
            CssClass="chxbx" ForeColor="Teal" OnClick="BtnLoadChargeFileDevoluciones_Click" ValidationGroup="valChrgFileDevoluciones" CausesValidation="true" />
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="btnLoadClassFileDevoluciones" />
    </Triggers>
</asp:UpdatePanel>

在aspx.cs中:

/// <summary>
/// Load file.
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
protected void BtnLoadChargeFileDevoluciones_Click(object sender, EventArgs e)
{
    try
    {
        if (fupld_cargue.HasFile)
        {
            // Here, the file is detected in server-side 
            // and it's been handled as logic demands it.
        }
        else
        {
            // File not detected in server-side.
            MessageBox("Please, select a file");
        }
    }
    catch (Exception handledException)
    {
        // Omitted exception-handling code in this sample.
    }
}

根据前面的解释,我终于可以解决使用 FileUpload 发送文件时遇到的问题 - 它位于 UpdatePanel控制.