1

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

此解决方案有一个 WebForm(来自 a 的子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 AsyncFileUploadcontrol ), the following message shows:

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

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


在搜索此错误的原因时,大多数建议是:

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

我也试过:

  • 检查AjaxControlToolkit.dllAjaxControlToolkit.resources.dll是否在 bin 文件夹中。这些 dll 在bin文件夹中。
  • 更改AsyncFileUploadFileUpload,但是,由于此 WebForm 已经使用UpdatePanels,因此出于安全原因, FileUpload 将无法正常工作-正如我测试的那样,Google 的结果也是如此(例如,例如此答案)。
  • 我也尝试仅使用 FileUpload 和 Triggers,但 WebForm 包含各种 UpdatePanel,并且每次我添加TriggerandPostBackTriggerAsyncPostBackTrigger。出于这个原因,我放弃并结束了使用AsyncFileUpload控件。

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

4

2 回答 2

0

首先,您根本不想在 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>

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

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

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

以上是在系统网页下。

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

<system.webServer>

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

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

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

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

在此处输入图像描述

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

我想代替生产发布,您可能希望创建一个真实且完整的 IIS 副本并在某个 VM 上运行它,然后尝试发布到该 VM。

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

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

我看到/有这个:

在此处输入图像描述

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

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

总而言之,ajaxtoolkit 是用 nuget 安装的,还是你是如何安装和引用工具包的?

于 2020-12-22T06:28:03.380 回答
0

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

我遇到了这个条目-在西班牙语中,它链接了另一个页面上的另一个线程,其中解释了如何同时使用FileUploadUpdatePanel控件。

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

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

对于选择并将文件发送到服务器端,发送文件的按钮(一旦使用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控件内。

于 2020-12-24T13:07:54.103 回答