C# JavaScript函数使用

开发 后端
这里介绍MoveItemUp是你已经编写成功的C# JavaScript函数之一。在生成用于排序的按钮之前,该代码将以堆栈存放这些JavaScript命令。

C# JavaScript函数

为了使用客户端代码实现EnhancedListBox中项的重排序,你必须使用JavaScript脚本,并且要把它们依附到EnhancedListBox的两个按钮上。为此,我建议你使用“往后考虑”的方法。就象编写一个老式的ASP以前的Web页面,首先编写一些生成HTML文件的JavaScript。为此,最好的方法是运行该控件,然后观察其源码并把它的HTML代码复制到一个编辑器,再添加JavaScript。下面展示了你需要添加到你的控件中的JavaScript的原始形式。然后,借助于StringBuilder/StringWriter技术,该控件构建这部分代码。该JavaScript代码由两部分功能组成:接收一个HTML控件;使用选择索引并且在列表中上下移动它(基本上与我在本文开始我使用服务器代码向你展示的一样)。现在,你要理解,你把该JavaScript代码添加到Web控件的何处。为了实现在一个Web表单上有多个EnhancedListBox控件的情况下,该JavaScript代码不会被重复复制,你需要使用Page.ClientScript对象的ReGISterClientScriptBlock方法输出它。

要使这个方法起作用,你必须在重载的OnInit事件中调用它。

最后,为使按钮正确工作,你需要把添加的客户端方法依附到其上。在下面的代码中,你会看到引用了一个方法RenderButtons。尽管我没有把该代码在此列出,但是它能够使用我在以前文章中介绍的技术生成按钮。当时,在生成实际HTML标签的之前,标签属性是使用 AddAttribute方法以栈式存放的。在此,你使用一样的技术把客户端方法依附到你的按钮。

  1. string s_MoveUp = "MoveItemUp(document.all." +this.ClientID + ");  
  2. output.AddAttribute(HtmlTextWriterAttribute.OnClick,s_MoveUp);  

记住,MoveItemUp是你已经编写成功的C# JavaScript函数之一。在生成用于排序的按钮之前,该代码将以堆栈存放这些JavaScript命令。对于向下(down)按钮,你使用一样的技术。注意,我使用ClientId代表该生成后的控件的ID;但是,在这个控件位于一个复合控件内部时,这个属性要考虑使用父控件的名字。

现在,你可以成功地把该控件应用于一个Web表单中。你可以使用与你操作一个标准ListBox控件一样的方式在其上添加一些项。

事实上,这完全是一个投放位置占位符(或ASP.NET ListBox控件)。当你使用重排序按钮时,你将看到列表中的项相应地改变顺序。现在让我们先记下这个问题。如果你把一个按钮拖动到一个Web表单上 (不需要为之添加代码)并执行一个回寄,你猜会发生什么呢?完全与我以前描述的一样;任何你使用重排序按钮作的重排序改变都将恢复到在最近一次回寄之前该控件看上去的状态。因此,让我们修改一下这个问题。

首先,我再添加一些JavaScript。注意,这部分代码被添加到重载的OnInit方法中并且使用StringBuilder/StringWriter技术进行构建;而且,这个JavaScript方法的名字是BuildItemList。这个函数负责构建列表框完整内容的一个字符串描述并且把该串放到要传递到该函数的一个HTML元素的value属性中。你可以把这看作是列表内容的一种串行化。该串行化的输出风格会根据你自己的设计的不同而有所不同。调用这个C#  JavaScript函数需要依附到该按钮上的其它代码。

  1. string s_MoveUp = "MoveItemUp(document.all." + this.ClientID + "); ";  
  2. string s_BuildItemList ="BuildItemList
    (document.all."
     + this.ClientID + ",document.all.__" + this.ClientID + "); ";  
  3. output.AddAttribute(HtmlTextWriterAttribute.Onclick,MoveUp + " " + BuildItemList);  

现在,让我们来分析一下你发送到BuildItemList函数的两个参数。第一个参数相应于生成的控件的ID。第二个参数是另外一个ID,与前一个命名一致,但是前面有一个"__"。这是一个你仍然需要添加到你的Web控件的隐藏的文本框,它将作为一个“串行化”项列表的占位符。我要在OnPreRender事件中注册这个隐藏的文本域。 

  1. string s_MoveUp = "MoveItemUp(document.all." + this.ClientID + "); ";  
  2. string s_BuildItemList ="BuildItemList(document.all." + this.ClientID +  
  3. ",document.all.__" + this.ClientID + "); ";  
  4. output.AddAttribute(HtmlTextWriterAttribute.Onclick,MoveUp + " " + BuildItemList);  

注意,我已经使用我们的控件的ID来标识隐藏的文本域。

到目前为止,你已经拥有了一个完整功能的Web控件;其中,客户端JavaScript被绑定到其中的两个按钮上。该JavaScript成功地实现在ListBox中的项的重排序并且把其内容串行化为一个字符串;然后,该字符串被存储在一个隐藏的文本域中。所有这些都发生在客户端。如果一个回寄发生,不会发生重排序,因为当重排序时控件的Item服务器属性还没有收到你对它作的任何改变的消息;但是幸运的是,位于隐藏的文本域中的表单的一个串行化快照中发生了这一变化。现在,你有了可以与Item属性一起使用的内容了。那么,接下来,你该如何实现呢?

【编辑推荐】

  1. 概述C# Cast
  2. 浅析C# switch和case
  3. C#托管资源和非托管资源
  4. 分析C# ListBox控件
  5. 简单介绍C++ RAII
责任编辑:佚名 来源: 博客园
相关推荐

2009-07-31 14:26:38

JavaScript函C#函数

2009-08-31 09:21:38

JavaScript调

2009-09-01 11:28:32

C#使用函数重载

2009-07-31 14:47:22

JavaScript函C#

2009-08-31 09:59:13

C# CreateEm

2009-08-31 10:14:49

C# CreateEm

2009-08-31 10:28:00

C# CreateEm

2009-07-30 15:24:13

C#析构函数C#构造函数

2009-08-14 09:27:27

C#构造函数的特性

2009-08-28 17:01:43

C#构造函数

2009-07-31 14:15:38

C# 构造函数

2009-08-24 18:09:13

C#构造函数

2009-07-31 14:03:21

C# Format函数

2009-07-31 14:08:54

C# 匿名函数

2009-07-31 16:00:30

C#函数重载

2009-08-10 14:43:03

C#函数Convert

2009-07-31 14:54:48

dll函数C#导出

2009-08-14 17:24:28

C#构造函数和析构函数

2011-10-12 06:09:32

Dart

2009-07-31 15:52:47

C#常用函数
点赞
收藏

51CTO技术栈公众号