关于ASP.NET调用JavaScript的实现 2
点击次数:14 次 发布日期:2008-11-26 11:32:21 作者:源代码网
|
源代码网推荐 源代码网推荐 Datagrid的内置编辑功能使得当记录的字段较少时的一种编辑方法。用户不必进入一个单独的页面编辑记录,而是直接点编辑按钮就可以使当前行进入编辑模式。而另一方面,有一些Javascript程序需要引用控件的名称。比如,很多程序在需要用户输入日期时都提供一个日期控件以保证日期格式的合法性,当用户点控件图标时弹出一个新窗口供用户选择日期。此时需要把显示日期的文本框的ID提供给新窗口,以便当用户选择日期后值可以回填到文本框中。 源代码网推荐 源代码网推荐 如果是普通的服务器文本框控件,它的ID与生成的HTML输入框的ID是相同的;但是在Datagrid的编辑状态下,两个ID并不相同(其道理与上例相同),这就需要用到控件的ClientID属性。 源代码网推荐 源代码网推荐 Protected Sub ItemEdit(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) 源代码网推荐 源代码网推荐 Dim sDateCtrl as string 源代码网推荐 源代码网推荐 sDateCtrl = grd1. Items (e.Item.ItemIndex) . Cells(2). FindControl("txtDate") . ClientID 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 这里假设ItemEdit方法是Dategrid的OnItemEdit事件处理程序,同时在Datagrid的第三列包含一个名为txtDate的服务器文本框控件。 源代码网推荐 源代码网推荐 源代码网推荐 4.引用ASP.Net自动生成的Javascript程序 源代码网推荐 源代码网推荐 所谓的“服务器端控件”是针对开发人员的,在生成的HTML源程序中并没有服务器和客户端之分,都是标准的HTML,DHTML和Javascript。它之所以能响应用户的输入是因为每个控件的事件处理程序最终都生成了一段脚本,此脚本重新提交页面使得Web Server有机会再次响应并作出处理。通常情况下我们不必知道此脚本是什么也不必直接调用此脚本,但在有些情况下,适当地调用此脚本可以简化许多工作。请看下面两个例子。 源代码网推荐 源代码网推荐 ● 点Datagrid的任一位置以选中一行 源代码网推荐 源代码网推荐 Datagrid提供了一种内置的选择按钮,当点此按钮时选中当前行(可以设置SelectedItemStyle属性以使当前行有不同的外观)。但用户可能更习惯于点任意一个位置都能选中一行,如果完全自己实现这个功能相当烦琐。一个好的思路是添加一个选择按钮,但使此列隐藏,当点任一行时调用此按钮产生的Javascript脚本。 源代码网推荐 源代码网推荐 Sub Item_Bound(ByVal sender As Object, ByVal e As DataGridItemEventArgs ) 源代码网推荐 源代码网推荐 Dim itemType As ListItemType 源代码网推荐 源代码网推荐 itemType = CType(e.Item.ItemType, ListItemType) 源代码网推荐 源代码网推荐 If (itemType <> ListItemType.Header) And _ 源代码网推荐 源代码网推荐 (itemType <> ListItemType.Footer) And _ 源代码网推荐 源代码网推荐 (itemType <> ListItemType.Separator) Then 源代码网推荐 源代码网推荐 Dim oSelect As LinkButton = CType(e.Item.Cells(5).Controls(0), LinkButton) 源代码网推荐 源代码网推荐 e.Item.Attributes("onclick") = Page. GetPostBackClientHyperlink (oSelect, "") 源代码网推荐 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 这里假设选择按钮位于第6列。e.Item代表了一行,从生成的HTML上看就是在每个<tr>里增加了一个onclick事件。Page.GetPostBackClientHyperLink方法返回页面中LinkButton控件产生的客户端脚本,其中第一个参数是Linkbutton控件,第二个参数是传递给此控件的参数,通常为空。如果不是LinkButton控件,有一个类似的函数GetPostBackClientEvent,读者可以参考MSDN。 源代码网推荐 源代码网推荐 ● 服务器产生的脚本与手工添加的脚本冲突 源代码网推荐 源代码网推荐 服务器控件的服务器事件一般对应到客户端控件的相应事件,如Dropdownlist的SelectedIndexChanged事件对应HTML <Select>的onchange事件。如果你要手工增加一个onchange事件,则会在客户端产生两个onchange,浏览器就会忽略掉一个。比如用户希望每当改变了Dropdownlist中的选项就保存到数据库(虽然不是很常见,但确实有这种需要),但同时还希望提醒用户是否确实要做保存。显然,保存的代码应该放在SelectedIndexChanged事件中,而提醒的工作应该手工加一段onchange事件。结果就是两个onchange只能执行一个。正确的方法应该是添加一个不可见的保存按钮,在手工增加的onchange事件中调用此按钮生成的程序。 源代码网推荐 源代码网推荐 Page_Load方法如下: 源代码网推荐 源代码网推荐 Dim sCmd as string 源代码网推荐 源代码网推荐 sCmd=Page.GetPostBackClientHyperlink(btnUpdate, "") 源代码网推荐 源代码网推荐 If not page.isPostback then 源代码网推荐 源代码网推荐 Dropdownlist1.Attributes.add("onchange","ConfirmUpdate(""" & sCmd & """)") 源代码网推荐 源代码网推荐 End if 源代码网推荐 源代码网推荐 源代码网推荐 ConfirmUpdate函数如下 源代码网推荐 源代码网推荐 <Script language=”javascript”> 源代码网推荐 源代码网推荐 function ConfirmUpdate(cmd){ 源代码网推荐 源代码网推荐 if confirm(“Are you sure to update?”) 源代码网推荐 源代码网推荐 eval(cmd); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 </Script> 源代码网推荐 源代码网推荐 这里利用了Javascript eval函数来调用一个字符串中包含的命令。需注意的是包含命令的字符串不能用单引号括起来,因为自动生成的脚本中包括单引号,所以这里用两个双引号表示字符串本身的双引号。 源代码网推荐 源代码网推荐 三、结束语 源代码网推荐 源代码网推荐 以上简单讨论了在ASP.Net中插入Javascript的几种情况。合理地在服务器程序中插入客户端的Javascript脚本,可以提高程序的运行效率并提供更友好的用户界面。 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
