技术开发 频道

用jQuery、ASP.NET与Ajax实现CRUD网页

  服务器部分

  用于此部分示例的页面非常简单:在Northwind数据库中一个显示所有客户的列表框,一个显示所有选定客户的标签,一个显示且让用户更新ContactName的文本框,以及一个触发更新的HTML按钮。现实中的页面肯定更复杂一些,但是此示例足以阐述利用这三项技术的架构了。

  由于用户必须从服务器对页面发出请求,所以你应该使用标准服务器端ASP.NET进程,在发送给用户前尽可能多的在页面中放入数据。虽然jQuery对此不做要求,但是笔者曾使用过Entity Framework和Entity控件来填充列表框。对于这个页面,无需进行额外添加。

  但是笔者需要创建两个Web服务:一个是GetCustomer,它在传递了客户ID后,返回一个Customer对象;另一个是UpdateCustomer,在传递Customer对象后,依据控件的属性值更新数据库。可以用.ASMX文件或WCF类创建这些服务。使用.ASMX文件比使用WCF所需的配置更改要少,因此我们使用一个名为NorthwindCustomer.asmx的.ASMX文件在此作示例。

  为了将.ASMX服务配置成可从客户端调用的服务,你只需取消包含在类中ScriptService的默认属性。如果你要创建的是一个网页,而非ASP.NET项目,那么你还要确保是否在Namespace中包含了.ASMX代码文件中的代码。此外,还需以.ASMX文件的沿用属性指定Namespace。

  无论是使用.ASMX文件还是WCF类,都需要指定ScriptManager Services集合中的.ASMX或.SVC文件。完成这些后,就可以转向客户端代码了。

  检索ASP.NET控件

  当用户在列表框中选定一个客户,列表框点击事件中的代码必须调用Web Service上的GetCustomer方法。没有jQuery的话,添加事件处理程序意味着追查那些用于列表框的HTML要素以及添加一个新的Onclick属性。在其他情况中,这样就无法将进程代码从用户界面里分离。

  而使用jQuery的话,该进程就不需要向HTML要素中添加任何事物。相反,你的代码会对该要素进行检索,并将其函数绑定到控件上。要检索要素的附注,可使用圆括号中的jQuery选择器。此选择器是CSS选择器和XPath位置路径的结合体。该选择器通过设置为ListBox1的ID属性寻找所有要素:

  $("#ListBox1")

  一旦检索完要素的引文,就可以调用检索要素上执行操作的jQuery函数。举例,事件名称被传递后,bind函数会将事件处理程序附加到一个控件上,而事件被触发后,函数就会被运行。此示例绑定的就是用户点击列表框后,会显示"Hello,World"的函数:

  $("#ListBox").bind("click", function(e) {

  alert(
"Hello, World");

  });

  使用bind方法的好处之一是,将一个事件附加给一个控件的操作可完全从用户界面的代码中分离。所以我们可以将此代码放入单独的JavaScript文件中,而不是页面中。

  要想融合ASP.NET技术,还需要解决ASP.NET从控件ID属性生成要素ID属性的方式。虽然有多种方式可以解决这个问题,不过其中却有两种方法可减少工作量。

  第一种方法是使用.ASPX文件中嵌入的服务器端代码来返回数值,控件创建的要素ID属性会使用该数值。此数值可在控件的Clientld属性中找到。下面的代码展示了这一技巧:

  $("#").bind(...

  另一种替代方法是使用不同的选择器,该选择器可以让你通过指定属性和属性值的方法找到控件。使用此技巧的话,仍然可以根据要素ID属性进行明确搜索。不过,你可以使用以jQuery结尾的运算符检查ID属性的最终字符,而不是检查整个ID属性。不要考虑ASP.NET对控件ID所做的更改,由此产生标识符通常都以下划线开头,以控件服务器端ID结尾。这一代码同样也能查找可对ID属性为ListBox1的控件作出响应的要素:

  $("element[id$='_ListBox1']").bind(...

  在此文中,我们只使用前一种方法。如果使用Microsoft .NET Framework 4,则还有第三种选择:Clientld属性可写,因此用户可以控制控件属性。

0
相关文章