当前位置: 首页 > 面试题库 >

ASP.Net-AJAX UpdatePanel中的Javascript

邰胤
2023-03-14
问题内容

我从UpdatePanel内部的外部javascript文件运行javascript时遇到问题。我试图让一个颜色选择器在ListView内部工作。ListView在UpdatePanel内部。

我正在使用这个颜色选择器。

这是我将其范围缩小到的内容:

  • 如果我在之外的文本框上使用颜色选择器UpdatePanel,则在所有回发中它都可以正常工作。

  • 如果我在内的文本框上使用颜色选择器UpdatePanel,它将起作用,直到执行异步回发(单击ListView中的“编辑”按钮)为止。一旦UpdatePanel做了回传,点击后的文本将不再显示颜色选择器。当文本框位于ListView 的InsertItemTemplateEditItemTemplate中时,也会发生相同的情况。

如果您想复制它,只需下载颜色选择器(它是免费的),然后将其添加到网页…

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

<div>
    <asp:UpdatePanel ID="panel1" runat="server">
        <ContentTemplate>
            <asp:TextBox runat="server" ID="textbox" CssClass="color" />
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

页面加载后,颜色选择器可以正常工作。当您单击按钮(进行回发)时,颜色选择器将不再起作用。

有任何想法吗?


问题答案:

异步往返之后,将不会运行任何启动脚本,这可能是为什么在AJAX回调后无法启动的原因。颜色选择器可能具有需要在页面加载时执行的功能

我已经遇到了很多次,以至于我写了一个小方法在后台代码中注册脚本,该方法可以处理异步和非异步往返。基本概要如下:

private void RegisterClientStartupScript(string scriptKey, string scriptText)
{
    ScriptManager sManager = ScriptManager.GetCurrent(this.Page);

    if (sManager != null && sManager.IsInAsyncPostBack)
    {
        //if a MS AJAX request, use the Scriptmanager class
        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), scriptKey, scriptText, true);
    }
    else
    {
        //if a standard postback, use the standard ClientScript method
        scriptText = string.Concat("Sys.Application.add_load(function(){", scriptText, "});");
        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), scriptKey, scriptText, true);
    }
}

实际上,我将以上内容烘焙到了基页类中,以便我正在使用的任何页面都可以调用this.RegisterClientStartupScript(...)。为此,只需创建一个基础页面类并将其包含在其中(确保将受保护的标记为非私有,否则您继承的页面类将无法访问它)。

使用以上代码,无论页面正在执行回发还是回调,我都可以放心地注册客户端脚本。意识到您正在使用外部脚本文件,您可能可以修改上述方法来注册外部脚本,而不是内联。有关更多详细信息,请查阅ScriptManager类,因为有几种脚本注册方法…



 类似资料:
  • 问题内容: 在ASP.NET MVC中使用哪个更好? 问题答案: 我个人更喜欢jQuery,原因如下:- 插件社区的多样性要大得多,并且吸引了具有广泛背景的开发人员(不仅仅是MS堆栈)。对于MS-AJAX,目前,您的UI小部件几乎受限于客户端AJAX控件工具包。 我发现jQuery API比MS AJAX提供的通用客户端任务更适用 鉴于MVC中缺少WebForms烟雾和镜像,您有时需要对DOM进行

  • 我试图使用Spring-boot Java和SteelToe ASP.NET创建微服务 步骤1:我使用Java创建了一个完整的服务(一个带有UI和API的服务。它托管在PCF上)。API内部定义了ClassesControler。 编辑:我修改了这个问题,使其更加清楚。流量的流动是从Java服务到.NET服务。.NET服务请求来自JAVA服务中的控制器的类列表(ClassesController.

  • 问题内容: 是什么区别,并在ASP.Net Web应用程序项目的情况下? 这是我要执行的操作的代码: 如果它们在功能上相同,那么在性能方面哪个更好? 这是一个C#4.0 / ASP.Net Web应用程序,在组织内部将看到适度的使用情况。谢谢你的回答。 问题答案: 返回用于运行托管您的Web应用程序的应用程序池的标识。如果您使用Windows身份验证和模拟,那么它将是实际用户的名称,但是在所有情况

  • 本文向大家介绍ASP.NET MVC中的AJAX应用,包括了ASP.NET MVC中的AJAX应用的使用技巧和注意事项,需要的朋友参考一下 一、ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒):                      ASP.NET MVC提供了2个常用的ajax辅助方法. Ajax.Acti

  • 本文向大家介绍asp.net-web-api 路由在ASP.NET WebAPI中的工作方式,包括了asp.net-web-api 路由在ASP.NET WebAPI中的工作方式的使用技巧和注意事项,需要的朋友参考一下 示例 在ASP.NETWeb API中,控制器是处理HTTP请求的类。控制器的公共方法称为动作方法或简称为动作。 Web API框架收到请求后,会将请求路由到操作。为了确定要调用的

  • 问题内容: 我已经读过,为了连接到Azure Redis缓存,最好遵循以下做法: 根据Azure Redis文档: 与Azure Redis缓存的连接由ConnectionMultiplexer类管理。此类设计为在整个客户端应用程序中共享和重用,并且不需要在每个操作的基础上创建。 那么,在我的ASP.net MVC应用程序之间共享ConnectionMultiplexer的最佳实践是什么?应该在G