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

问题描述

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

解决方案有一个 WebForm(来自 Site.master 的子项),其中包含多个 UpdatePanelsTabContainer 和单个 AsyncFileUpload 控件。

Locally (ie in developer enviroment),the WebForm loads and works successfully,but,once published the WebForm in an different server - when a file is selected (by using the {{ 1}} 控制),显示如下信息:

找不到适合指定文化的任何资源或 中立文化。确保 “AjaxControlToolkit.Properties.Resources.resources”是正确的 在编译时嵌入或链接到程序集“AjaxControlToolkit”中 时间,或者所有所需的附属程序集都是可加载的,并且 完全签署。

在我本地开发者环境中,没有出现这个错误,可以按预期选择和处理文件


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

  • 添加 AsyncFileUploadScriptManager - source。尝试此选项时(通过添加任何这些 ScriptManager 控件),WebForm 加载为空白,并且在输出窗口中 - 在运行时显示 - 说:只能在页面添加一个 ScriptManager - 这是正确的,因为 ToolkitScriptManager 控件已经在 Site.master 中。
  • 检查 ToolkitScriptManager 是否在 AjaxControlToolkit.dll 文件夹中。也检查过,这个 dll 位于 bin 文件夹中。

我也试过:

  • 检查 binAjaxControlToolkit.dll 是否在 bin 文件夹中。这些 dll 位于 AjaxControlToolkit.resources.dll 文件夹中。
  • bin 更改为 AsyncFileUpload,但是,由于此 WebForm 已经使用了 FileUpload,出于安全原因,FileUpload 将不起作用 - 正如我测试的那样,Google 的结果是这样说的(例如this answer)。
  • 我也尝试仅使用 FileUpload 和 Triggers,但 WebForm 包含各种 UpdatePanels,并且每次我添加 UpdatePanelsTriggerPostBackTrigger。出于这个原因,我放弃并结束使用 AsyncPostBackTrigger 控件。

还可以做些什么来检查丢失的资源和/或此错误的原因并解决此问题?

解决方法

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

母版页上的脚本管理器。这很好,值得推荐,这样您就不必逐页做​​这件事了。

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

您必须注意的地方是 web.config 文件。您需要包含您正在使用的 ajax 工具包程序集。

这样说:

然后在页面部分,你应该有/看到这个:

<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>

在上面 - ajax takeit 标记前缀是必需的(这可以在您的 Web 表单上实现更多的 ajax 控件的拖放,但我确实有上面的 - 所以假设您需要它。

您还应该看到/拥有这个:

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

以上为系统网页。

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

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

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

现在在上面,我使用的是 AjaxFileUpload,而您使用的是 AsyncFileUpload。

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

enter image description here

另外,不清楚你是如何安装ajaxtoolkit的。我假设 nuget?

我想,为了代替生产发布,您可能想要收集一个真实完整的 IIS 副本,然后在某个虚拟机上运行它,然后尝试发布到该虚拟机。

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

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

我看到/有这个:

enter image description here

可以肯定,只是添加 ajaxtoolkit 引用会导致上述所有 4 个引用发生。

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

总而言之,ajaxtoolkit是用nuget安装的,还是怎么安装和引用工具包的?

,

我无法使用 AsyncFileUpload 控件解决问题,但是,作为一个好的方面,在寻找如何解决此问题的同时,我又尝试了 em> 更改代码并同时使用 FileUploadUpdatePanel 控件。

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

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

我更改了 (而是使用 AsyncFileUpload) 的代码,以便在 中使用 FileUpload UpdatePanel,但是,这里有一个问题:

对于选择和发送文件到服务器端,发送的Button 文件(使用FileUpload 控件选择后)必须具有 它自己的 UpdatePanel 带有各自的 Triggers 标签。


示例:我在这里使用 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 中控制。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...