zoukankan      html  css  js  c++  java
  • JavaScript 之 ScriptManager.RegisterStartupScript的应用

          如果页面中不用Ajax,cs中运行某段js代码方式可以是:

          Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window.open('RefrigeratoryInfoList.aspx')</script>");

          如果页面中使用了Ajax ,则上述代码即使执行也无效果。对这种情况我们通常采用:

          ScriptManager.RegisterStartupScript(this, typeof(string), "", "alert('成功!');javascript:location='RefrigeratoryInfoList.aspx';", true);

          其中第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。 第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题. 第三个脚本函数的名字,随便起。 第四个是脚本内容。 第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

    注意:aspx代码是这样的

    <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <table id="TableView" class="crop_table">
                    <tr>
                        <td class="crop_table_lable">
                            日期<span style="color: #F00;">*</span>
                        </td>
                        <td>
                            <asp:TextBox ID="txtDate" runat="server" Width="200px" CssClass="crop_table_text"
                                onclick="WdatePicker({el:'txtDate',lang:'zh-cn',readOnly:true,dateFmt:'yyyy-MM-dd'})"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RFV1" runat="server" ControlToValidate="txtDate"
                                ErrorMessage="必填项"></asp:RequiredFieldValidator>
                        </td>
                        <td class="crop_table_lable">
                            产品名称<span style="color: #F00;">*</span>
                        </td>
                        <td>
                            <asp:DropDownList ID="ddlProductionName" runat="server" DataTextField="CHP_Name"
                                DataValueField="CHP_ID" OnSelectedIndexChanged="ddlProductionName_SelectedIndexChanged"
                                AutoPostBack="True">
                            </asp:DropDownList>
                        </td>
                    </tr>
                    <tr>
                        <td height="35" colspan="4" align="center">
                            <asp:Button ID="btnAdd" runat="server" Text="·提 交·" CssClass="crop_table_btn" onmouseover="this.className='crop_table_btn_mouseover'"
                                onmouseout="this.className='crop_table_btn'" OnClick="btnAdd_Click" />
                            <input name="Submit" type="reset" value="·重 填·" class="crop_table_btn ml50" value="取消修改"
                                onmouseover="this.className='crop_table_btn_mouseover ml50'" onmouseout="this.className='crop_table_btn ml50'" />
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:UpdatePanel>
    View Code

          另外,js无法干涉cs代码。所以一旦脚本注册成功,js和cs代码会互不相干的各自运行。

    如果在onClick事件中,使用该方法注册了两个脚本。如果注册的两个脚本函数的名称相同,则第二个脚本函数就不会执行。因为脚本管理器使用此字符串来分析是否是一个已经加载过的脚本,如果加载过,将不会再次渲染。所以第二个就不会加载执行了。

          ScriptManager和ClientScriptManager的命名空间均是System.Web.UI。

          ClientScript获取用于管理脚本、注册脚本和向页面添加脚本的ClientScriptManager对象,用于管理普通的Script。ClientScript是ClientScriptManager的对象,ClientScriptManager是类。

          ScriptManager是用于管理AJAX脚本库和脚本文件。

         ScriptManager适用在特殊的场合,其实可以通过寻找控件的parent,判断是否有updatepanel,如果有就用ScriptManager;没有的话当然用ClientScript,避免每次postback操作时控件都要进行资源文件的注册。也就是说 是否兼容ajax的问题,ScriptManager兼容于ajax,在ajax updatepanel中使用ClientScript是无效的。ScriptManager.RegisterStartupScript 适用于无刷新后台调用JS。 ClientScript.RegisterStartupScript  普通的后台调用前端的JS更适用。

  • 相关阅读:
    BestCoder17 1001.Chessboard(hdu 5100) 解题报告
    codeforces 485A.Factory 解题报告
    codeforces 485B Valuable Resources 解题报告
    BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
    codeforces 374A Inna and Pink Pony 解题报告
    codeforces 483B Friends and Presents 解题报告
    BestCoder15 1002.Instruction(hdu 5083) 解题报告
    codeforces 483C.Diverse Permutation 解题报告
    codeforces 483A. Counterexample 解题报告
    NSArray中地内存管理 理解
  • 原文地址:https://www.cnblogs.com/xinaixia/p/3929692.html
Copyright © 2011-2022 走看看