.net 后台插入脚本后,页面样式改变解决方案

需求:点击“打印”按钮弹出新窗体。

1. 本人不熟悉.net 客户端脚本没有写出来,故退而求其次,使用后台代码实现。

2. Response.Redirect("");重定向不符合新窗口显示要求。PASS;

3. 使用Response.Write(""); 会发现在弹出新窗口后  原页面样式整体改变。PASS;

4. 使用Page.ClientScript.RegisterStartupScript("");  最终实现需求效果。

aspx页面
<Columns>

                            <asp:BoundField HeaderText="ID" Visible="False" />

                            <asp:TemplateField HeaderText="序号">

                                <ItemTemplate><%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%> 

                                </ItemTemplate>

                            </asp:TemplateField> 

                            <asp:BoundField HeaderText="障碍编号" DataField="Field11146" />

                            <asp:BoundField HeaderText="发生时间" DataField="field14951" />

                            <asp:BoundField HeaderText="结束时间" DataField="field15072" />

                            <asp:BoundField HeaderText="系统名称" DataField="Field14995" />

                            <asp:BoundField HeaderText="障碍概述" DataField="Field11149" /> 

                            <asp:BoundField HeaderText="所属路局" DataField="field11166" /> 

                            <asp:BoundField HeaderText="障碍原因" DataField="field14957" />  

                                                      <asp:TemplateField HeaderText="打印">

                                <ItemTemplate>

                                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%# Bind("ID") %>'

                    onClick="LinkButton1_Click" Text="打印"></asp:LinkButton>

                                </ItemTemplate>

                                <ItemStyle Width="40px" />

                            </asp:TemplateField>
aspx.cs代码
protected void LinkButton1_Click(object sender, EventArgs e)

    {

        string dID = ((LinkButton)sender).CommandArgument.ToString();

        //Response.Redirect("HistoryObstacle.aspx?id=" + dID);

        string addr = "HistoryObstacle.aspx?id=" + dID;

        //Response.Write("<script language='javascript'>window.open('" + addr + "');</script>");

        Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script language='javascript'>window.open('" + addr + "');</script>");

    }

------------------------------------------------------------------

沙场秋点兵:

ClientScript.RegisterStartupScript方法有3个重载:

方法描述
1:RegisterStartupScript(Page, String, String) 

向 ScriptManager 控件注册一个启动脚本块并将该脚本块添加到页面中。需要向第三个参数添加<script></script>脚本标签。

第一个参数为页面Page。

第二个脚本函数的名字,随便起。

第三个是<script></script>形式的脚本内容。

2:RegisterStartupScript(Control, Type, String, String, Boolean) 

使用 ScriptManager 控件为 UpdatePanel 中的某个控件注册一个启动脚本块,并将该脚本块添加到页面中。

第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。

第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题.

第三个脚本函数的名字,随便起。

第四个是脚本内容。

第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

3:RegisterStartupScript(Page, Type, String, String, Boolean) 

为每个异步回发向 ScriptManager 控件注册一个启动脚本块,并将该脚本块添加到页面中。页面如果有用到Ajax需要用到这种。

第一个参数为页面Page。

第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题.

第三个脚本函数的名字,随便起。

第四个是脚本内容。

第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

RegisterStartupScript和RegisterClientScriptBlock的区别:

View Code
Page.Response.Write("<script>var response;</script>");    



Page.RegisterStartupScript("RegisterStartupScript","<script>var RegisterStartupScript;</script>");    



Page.RegisterClientScriptBlock("RegisterClientScriptBlock","<script>var RegisterClientScriptBlock;</script>");  

 

Response.Write输出后的位置在源文件的第一行. 



RegisterClientScriptBlock输出后的位置会在<form>的下一行.(在asp.net自带的脚本和一些隐藏域之下). 



RegisterStartupScript输出后的位置会在</form>的上一行.

综上,如何在后台执行一段前台脚本. 给div 的innerHTML赋值.如下:

View Code
在后台执行一段前台脚本. 给div 的innerHTML赋值



Page.ClientScript.RegisterStartupScript(typeof(string),"",

"<script type='text/javascript'>

document.getElementByIdx('divImportdata').innerHTML='<img src="http://images.cnblogs.com/disconfirm.gif"';

</script>");

你可能感兴趣的:(.net)