c#中JavaScript与后台代码的相互调用

 

c#中JavaScript与后台代码的相互调用

Posted on 2010-11-07 11:24 O零O 阅读(329) 评论(1) 编辑 收藏

问题描述:

在后台代码中,需要弹出一个对话框,让用户选择确定或者取消,用的是confirm。接下来的代码需要根据用户的选择情况进行调用。

这里就涉及到怎么取到confrim值的问题。

首先我想到的是,在Response.write()里面写confrim,它的返回值无法直接赋给后台代码的变量,就在前台加了一个辅助用的文本框,通过它的id号在JavaScript中给它赋值,然后在后台代码中通过id取值。很不幸,在Response.write()里面写的语句如果除了内部函数(如alert(),confirm())还有其他的语句,比如赋值的语句,它就不执行了。

第二,还是使用Response.write()。准备在Response.write()里面直接调用前台定义的JavaScript的函数。这个方法也不行,用Response.write()调用JavaScript的方法,这个方法只能是它内部的函数,自己定义的函数是不行的。

第三,放弃Response.write()。使用 ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript","<script>函数名();</script>");这个方式是能调用自己定义的 JavaScript的方法,当然“函数名()”要求是已经是定义过的。确定能调用这个方法后,准备如原先想的那样,通过id去取辅助用的文本框的值。这时候就发现,又出现了另外一个问题。通过ClientScript.RegisterStartupScript的方式是能调用自定义的脚本方法了,但是它的调用是发生在服务器代码执行完之后。也就是说,预想的执行顺序是,ClientScript.RegisterStartupScript--立即调用脚本方法--取得文本框的值--根据取到的值判断接下来要执行的服务器端代码。而实际顺序是,ClientScript.RegisterStartupScript--取得文本框的值(没变)--根据文本框的值判断接下来要执行的服务器端代码--调用脚本方法。结论,更改原先的设想,改为:通过ClientScript.RegisterStartupScript调用自定义脚本方法,在脚本方法里获取到用户的反馈信息,根据不同信息,在脚本里调用服务器的代码。

问题变为怎样在脚本里调用后台代码。

1.使用document.write("<%方法名()%>");使用这种方式的结果是,后台的“方法名()”方法被多次调用,不清楚document.write()做了什么,对方法的作用域、触发时机有什么影响。

2.将要调用的后台代码作为前台按钮事件处理方法。在脚本里通过调用按钮事件去调用后台代码。可行。

综上所述,为了能在后台加一个confirm并且根据它的返回值决定接下来的流程,首先要在后台使用 ClientScript.RegisterStartupScript调用JavaScript的方法,然后在页面上添加一个辅助用的按钮,再把根据 confirm返回值的不同而要执行的后台代码作为按钮的事件处理方法,最后,在JavaScript方法里调用按钮的事件处理方法。

代码要实现的功能是:检查数据库里是否已有某条记录,如果已经有,弹出confrim框让用户选择是否更改记录。如果点击确定,进行数据库更新操作。部分代码如下:

一、后台代码

11. string sql = "select * from LossInfo where 线路名称='" + lineName + "' and 年份 ='" + strYear + "' and 月份='"+strMonth+"'"
22.            string result=PowerGisDB.GetFirstData(sql);//执行查询语句 
33.            if (result !=""
44.             { 
55.                //在服务器端调用JavaScript代码 
66.                 ClientScript.RegisterStartupScript(ClientScript.GetType(),"myscript", "<script>houtai();</script>"); 
77.             } 
88. 

二、前台JavaScript

1# function houtai() 
2#     { 
3#          var isUpdate=confirm("已存在该线路线损记录是否更新"); 
4#         if(isUpdate)//调用后台方法 
5#         { 
6#                    document.getElementById("Buttonfz").click(); 
7#         } 
8#     }

 

增加的辅助按钮

11. <asp:Button ID="Buttonfz"runat="server"Text="Button"OnClick="Button1_Click"/>
 
 
三、后台事件处理方法:
11. protected voidButton1_Click(objectsender, EventArgs e) 
22.    { 
33.        MyUpdate();//进行数据库更新操作 
44.    }

附加:对于辅助按钮,为了避免用户单击引发click事件,要把它设为不可见。但是如果设置了不可见,脚本中也无法调用这个事件了。解决方法:在前台首先将按钮的visible属性设置false,然后在ClientScript.RegisterStartupScript之前,将它改为 true,MyUpdate()之后再改回false。

注:其实更简单的方法是把辅助按钮的width和borderwidth设成0就行了。

如果是html的按钮,除了onclick事件要改为onserverclick以外,对于visible的设置可以使用这种方式:style="display:none".

补加例子,使用html的input按钮。

前台aspx代码

11. <p>隐藏按钮上一行</p> 
22.            <input type="button"id="ButtonHidden2"runat="server"value="myHidden"style="display:none"onserverclick="ButtonHidden_Click"/> 
33.        <p>隐藏按钮下一行</p>
后台cs代码

011. protected voidPage_Load(objectsender, EventArgs e) 
02 2.     { 
03 3.        if (!Page.IsPostBack) 
04 4.         { 
05 5.             ClientScript.RegisterStartupScript(ClientScript.GetType(),"myscript", "<script>myinput();</script>"); 
06 6.         } 
07 7.     } 
08 8.    protected void ButtonHidden_Click(objectsender, EventArgs e) 
09 9.     { 
1010.        int i = 0; 
1111.         i++; 
1212.         Response.Write("i="+i); 
1313.     } 
1414. 
JavaScript代码:

 

 

 

1# <script language="javascript" type="text/javascript"> 
2#    function myinput() 
3#    {  
4#       document.getElementById("ButtonHidden2").click(); 
5#    }  
6#    </script> 

 

 

运行显示结果:

i=1

隐藏按钮上一行

隐藏按钮下一行

注意:如果在input按钮里面有 fun();",事件就不继续往下执行了,将return关键字去掉,会继续往下执行。

/r/n/n本文来自CSDN博客,转载请标明出处:http://www.flatws.cn/article/program/javascript/2010-08-26/10894.html

分类: .NET资料库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值