文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NET 4.0新特性的改进有哪些

2023-06-17 22:59

关注

这期内容当中小编将会给大家带来有关ASP.NET 4.0新特性的改进有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

ASP.NET 4.0新特性中,关于ClientID的改进可以在执行嵌套空间时,控制生成的Html的ID的情况。以往进行这样的操作时,很容易出现错误,很难控制。

一 :简介

我们知道因为在原来的ASP.NET应用程序中使用服务端控件在生成ClientID的时,是很难控制的,特别是在嵌套的控件的时候,比如在多个嵌套Repeater中要控制某一个控件生成的html的ID属性,是很困难的,

在ASP.NET 4.0新特性中提供ClientMode,来控制生成的Html的ID的情况。

二 :原来的问题和解决方法

原来要获得html的ID,就要使用这样的方式:

<%=lblName.ClientID%>   var lblName = document.getElementById("<%=lblName.ClientID%>");             alert(lblName.innerText);

如果是在嵌套的控件中,就需要使用并接字符串来组合成一下客户端ID,

for (var i = 1; i <= 9; i++) {                 var Element = document.getElementById("Repeater1_ctl0" + i + "_lblName");                 alert(Element.innerText);            }

其实也可以通过重写控件的ID来,控制在客户端ID的生成。

三:ASP.NET 4.0 的解决方案

现在你会发现在ASP.NET 4.0中会有一个ClientMode的新属性:

他有四个值分别是:

Legacy:就是使用传统的模式,设置ClientIDMode是无效的。

Inherit:这是继承在控件层次结构中,父级点控件的ClientIDMode设置。也就是说如果你父控件设置ClientIDMode=“Static”,那这里的子控件的ClientIDMode也是"Static"

Static :生成指定的ID,但你要注意页面上的ClientID的唯一性。

Predictable:这个设置值的使用,需要确保ID的是唯一性,这里分整个页面的唯一性和在控件中的唯一性两种情况,第二中就是说你可以在页面设置一个ID为Name,你还是可以在你的Repeater的Item项目模板中设置ID为Name的Label子控件,而不会报错,因为他会自动生成新的控件ID。具体下面详细解说:

(1)使用Legacy 值:

<asp :TextBox ID ="txtName" runat ="server" Width ="70%" ClientIDMode ="Legacy" /> <input id="ctl00_txtName" style="width: 65%" name="ctl00$txtName" />

上面是和传统生成 Client ID的情况的一样。

(2)Static 模式

ClientIDMode的值设置为Static,这里要注意就是在repeater等数据绑定控件中使用子控件时,他们生成的子控件ID都是一样的,所以控制不好控制。

<tr> <td> <span id="lblName"> td> <tr> <tr> <td> <span id="lblName"> td> <tr> <tr> <td> <span id="lblName"> td> <tr>


所以可以看出它比较适合单个控件的使用。

如果在repeater设置为Static,而将后面的控件设为Predictable

<asp:SqlDataSource ID="SqlDataSource1" runat="server"              ConnectionString=""              SelectCommand="SELECT * FROM [Products]">asp:SqlDataSource>        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" ClientIDMode="Static">         <HeaderTemplate >         <table>         <tr>            <td>sfsdtd>         tr>         HeaderTemplate>         <ItemTemplate >           <tr><td>            <asp:Label   ID="lblID"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>            td>tr>            <tr><td>            <asp:Label   ID="lblName"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>            td>tr>            <tr><td>            <asp:Label   ID="lblReorderLevel"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>            td>tr>         ItemTemplate>         <FooterTemplate>         FooterTemplate>            asp:Repeater>

结果为:

<span id="lblName_0"> <span id="lblName_1"> <span id="lblName_2"> <span id="lblName_3">

看来还比较灵活,

现在我们再在repeater外面方一个Label,ID为lblName_0的,ClientIDMode为Static或Predictable;

<asp:Label   ID="lblName_0"  Text="worksguo" runat="server" ClientIDMode=“Static或Predictable”>asp:Label>         <asp:SqlDataSource ID="SqlDataSource1" runat="server"               ConnectionString=""               SelectCommand="SELECT * FROM [Products]">asp:SqlDataSource>         <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" ClientIDMode="Static">          <HeaderTemplate >          <table>          <tr>             <td>sfsdtd>          tr>          HeaderTemplate>          <ItemTemplate >            <tr><td>             <asp:Label   ID="lblID"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>             <tr><td>             <asp:Label   ID="lblName"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>             <tr><td>             <asp:Label   ID="lblReorderLevel"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>          ItemTemplate>          <FooterTemplate>          FooterTemplate>             asp:Repeater>

结果在页面上就会出现

<span id="lblName_0"> <span id="lblName_0">

但并没有报错。

如果在再外面加一个Label,ID为lblName_0的,ClientIDMode为Static或Predictable,就会出现报错。

<asp:Label   ID="lblName_0"  Text="worksguo" runat="server">asp:Label>    <asp:Label   ID="lblName_0"  Text="worksguo" runat="server">asp:Label>         <asp:SqlDataSource ID="SqlDataSource1" runat="server"               ConnectionString=""               SelectCommand="SELECT * FROM [Products]">asp:SqlDataSource>         <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" ClientIDMode="Static">          <HeaderTemplate >          <table>          <tr>             <td>sfsdtd>          tr>          HeaderTemplate>          <ItemTemplate >            <tr><td>             <asp:Label   ID="lblID"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>             <tr><td>             <asp:Label   ID="lblName"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>             <tr><td>             <asp:Label   ID="lblReorderLevel"  Text='' runat="server" ClientIDMode="Predictable">asp:Label>             td>tr>          ItemTemplate>          <FooterTemplate>          FooterTemplate>             asp:Repeater>

这个时候就会报错,有相同的ClientID。

所以ClientIDMode使用是有层次范围的,在页面上相同层次级别上不能有相同ID,如果在Repeater中新的层次中就可以与上一层次有相同ID.

(3)Predictable Mode

在GridView数据绑定控件中还有一个新的属性ClientIDRowSuffix,它是在GridView中设置在使用Predictable模式,生成新的ID的后缀。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"               DataKeyNames="ProductName" DataSourceID="SqlDataSource1" ClientIDMode="Predictable" ClientIDRowSuffix="ProductName" >             <Columns>                 <asp:TemplateField HeaderText="ProductName" >                     <ItemTemplate>                         <asp:Label   ID="lblID"  Text='' runat="server" >asp:Label>                                              ItemTemplate>                 asp:TemplateField>                  Columns>         asp:GridView>


生成的结果为:

<tr>             <th scope="col">ProductNameth>         tr><tr>             <td>                         <span id="GridView1_lblID_Chai">Chaispan>                                              td>         tr><tr>             <td>                         <span id="GridView1_lblID_Chang">Changspan>                                              td>         tr><tr>             <td>                         <span id="GridView1_lblID_Aniseed Syrup">Aniseed Syrupspan>                                              td>         tr><tr>             <td>                         <span id="GridView1_lblID_Chef Anton's Cajun Seasoning">Chef Anton's Cajun Seasoningspan>                                              td>         tr><tr>

你可以看见我们将ProductName作为后缀名。

新特性总结

现在有这个ClientMode就能很好的控制生成到客户端的ID,这样可以更好的动态控制页面上标签。

上述就是小编为大家分享的ASP.NET 4.0新特性的改进有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯