• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

精进不休 .NET 4.0 (1) - asp.net 4.0 新特性之web.config的改进, ViewStateMode, Cli ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
[索引页]
[源码下载]


精进不休 .NET 4.0 (1) - asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进


作者:webabcd


介绍
asp.net 4.0 的新增功能
  • 简洁的 web.config 文件
  • 控件的新属性 ViewStateMode - 控件的视图状态模式
  • 控件的新属性 ClientIDMode - 生成客户端 ID 的方式
  • 列表控件的新属性 EnablePersistedSelection - 保存选中项的方式
  • 控件的其他一些增强点
    • RenderOuterTable - 指定控件在客户端呈现的时候,是否在外层加 table 标签
    • Menu 控件,在 asp.net 4.0 中将会以 ul li 的方式呈现在客户端
    • RepeatLayout - 布局模式,控件在客户端的 HTML 呈现方式
    • Wizard 和 CreateUserWizard 新增了 LayoutTemplate 模板
    • 原来使用 ListView 必须要有 LayoutTemplate ,在 asp.net 4.0 中可以不再用它了


示例
1、简洁的 web.config,配置信息被移到了 machine.config
Web.config
代码
<?xml version="1.0"?>

<!--
    清爽的 web.config 
    配置信息一律都放到 machine.config 里了
-->

<configuration>
    
    
<system.web>
        
<compilation debug="true" targetFramework="4.0" />
    
</system.web>
    
</configuration>


2、ViewStateMode 属性的用法
ViewStateDemo.aspx
代码
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
    CodeBehind
="ViewStateDemo.aspx.cs" Inherits="AspDotNet.ViewStateDemo" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    
<!--
        ViewStateMode - 控件的视图状态模式
            ViewStateMode.Enabled - 此控件启用 ViewState,并且其子控件中所有 ViewStateMode 为 Inherit 的控件也全部启用 ViewState
            ViewStateMode.Disabled - 此控件禁用 ViewState,并且其子控件中所有 ViewStateMode 为 Inherit 的控件也全部奇偶能用 ViewState
            ViewStateMode.Inherit - 此控件是否启用 ViewState,由其父控件的 ViewStateMode 的值决定
    
-->

    
<asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Disabled">

        
<!--无 ViewState-->
        
<asp:Label ID="Label1" runat="server" ViewStateMode="Disabled" />

        
<br />

        
<!--有 ViewState-->
        
<asp:Label ID="Label2" runat="server" ViewStateMode="Enabled" />

        
<br />

        
<!--无 ViewState-->
        
<asp:Label ID="Label3" runat="server" ViewStateMode="Inherit" />

    
</asp:PlaceHolder>

    
<br />
    
<!--点击“回发”按钮后观察各个 Label 控件是否启用了 ViewState-->
    
<asp:Button ID="Button1" runat="server" Text="回发" />
</asp:Content>

ViewStateDemo.aspx.cs
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspDotNet
{
    
public partial class ViewStateDemo : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
// 页面第一次加载时,分别给三个 Label 赋值,用于演示是否启用了 ViewState
            if (!Page.IsPostBack)
            {
                Label1.Text 
= "Label1";
                Label2.Text 
= "Label2";
                Label3.Text 
= "Label3";
            }
        }
    }
}


3、ClientIDMode 属性的用法
ClientID.aspx
代码
<%@ Page Title="ClientID" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
    CodeBehind
="ClientID.aspx.cs" Inherits="AspDotNet.ClientID" ClientIDMode="Static" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    
    
<!--
        ClientIDMode - 生成客户端 ID 的方式
            ClientIDMode.AutoID - 生成方式和以前一样,为保证唯一,会把其以上各层级的控件ID拿过来拼成一个页面中的唯一ID
            ClientIDMode.Inherit - 继承父控件的客户端ID生成方式
            ClientIDMode.Static - 静态方式。在服务端设置的ID是什么,客户端所呈现的ID就是什么
            ClientIDMode.Predictable - 生成ID的方式为:[Prefix]_[ID]_[Suffix]
        注意:
            在某控件层级中如果没有设置 ClientIDMode,则其默认值为 AutoID
            如果在控件层级中的父级控件设置了 ClientIDMode,则其子控件的默认值为 Inherit
    
-->

    
<!-- ClientIDMode.AutoID 的 Demo -->
    
<fieldset>
        
<legend>Legacy</legend>
        
<asp:TextBox ID="txtLegacy" ClientIDMode="AutoID" runat="server" Text="ID: txtLegacy" />
    
</fieldset>

    
<!-- ClientIDMode.Static 的 Demo -->
    
<fieldset>
        
<legend>Static</legend>
        
<asp:TextBox ID="txtStatic" ClientIDMode="Static" runat="server" Text="ID: txtStatic" />
    
</fieldset>

    
<!-- ClientIDMode.Inherit 的 Demo (注意:Page 上的 ClientIDMode 的值为 Static,所以此控件的客户端ID生成方式也是 Static)-->
    
<fieldset>
        
<legend>Inherit</legend>
        
<asp:TextBox ID="txtInherit" ClientIDMode="Inherit" runat="server" Text="ID: txtInherit" />
    
</fieldset>

    
<!-- Predictable 模式中自动分配 Suffix 的方式 -->
    
<fieldset>
        
<legend>Predictable Repeater </legend>
        
<div id="repeaterContainer">
            
<asp:Repeater ID="repeater" runat="server" ClientIDMode="Static">
                
<ItemTemplate>
                    
<div>
                        
<asp:Label ID="productPrice" ClientIDMode="Predictable" runat="server">
                        
<%string.Format(System.Globalization.CultureInfo.CurrentUICulture, "{0:c}"Eval("ProductPrice"))%>
                        
</asp:Label>
                    
</div>
                
</ItemTemplate>
            
</asp:Repeater>
        
</div>
        
<asp:TextBox ID="txtPredictableRepeater" runat="server" TextMode="MultiLine" Rows="10"
            ClientIDMode
="Static" Style="width: 99%;" />
    
</fieldset>

    
<!-- Predictable 模式中分配指定 Suffix 的方式(ClientIDRowSuffix 指定 Suffix 的数据来源) -->
    
<fieldset>
        
<legend>Predictable ListView </legend>
        
<asp:ListView ID="listView" runat="server" ClientIDMode="Static" ClientIDRowSuffix="ProductId">
            
<ItemTemplate>
                
<div>
                    
<asp:Label ID="productPrice" ClientIDMode="Predictable" runat="server">
                        
<%string.Format(System.Globalization.CultureInfo.CurrentUICulture, "{0:c}"Eval("ProductPrice"))%>
                    
</asp:Label>
                
</div>
            
</ItemTemplate>
            
<LayoutTemplate>
                
<div id="listViewContainer">
                    
<div id="itemPlaceholder" runat="server" />
                
</div>
            
</LayoutTemplate>
        
</asp:ListView>
        
<asp:TextBox ID="txtPredictableListView" runat="server" TextMode="MultiLine" Rows="10"
            ClientIDMode
="Static" Style="width: 99%;" />
    
</fieldset>

    
<script type="text/javascript">

        window.onload 
= function () {
            document.getElementById(
'<%= txtLegacy.ClientID %>').value += "   ClientID: " + '<%= txtLegacy.ClientID %>';

            document.getElementById(
'<%= txtStatic.ClientID %>').value += "   ClientID: " + '<%= txtStatic.ClientID %>';

            document.getElementById(
'<%= txtInherit.ClientID %>').value += "   ClientID: " + '<%= txtInherit.ClientID %>';

            document.getElementById(
'txtPredictableRepeater').value = document.getElementById('repeaterContainer').innerHTML;

            document.getElementById(
'txtPredictableListView').value = document.getElementById('listViewContainer').innerHTML;
        }

    
</script>
</asp:Content>

ClientID.aspx.cs
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspDotNet
{
    
public partial class ClientID : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            BindData();
        }

        
// 绑定数据到 ListView
        private void BindData()
        {
            Random random 
= new Random();

            List
<Product> products = new List<Product>();
            
for (int i = 0; i < 5; i++)
            {
                products.Add(
new Product { ProductId = i + 100, ProductName = "名称", ProductPrice = random.NextDouble() });
            }

            listView.DataSource 
= products;
            listView.DataBind();

            repeater.DataSource 
= products;
            repeater.DataBind();
        }

        
class Product
        {
            
public int ProductId { getset; }
            
public string ProductName { getset; }
            
public double ProductPrice { getset; }
        }
    }
}


4、EnablePersistedSelection 属性的用法
EnablePersistedSelection.aspx
代码
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
    CodeBehind
="EnablePersistedSelection.aspx.cs" Inherits="AspDotNet.EnablePersistedSelection" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    
<!--
        EnablePersistedSelection - 保存选中项的方式
            true - 根据 DataKeyNames 指定的字段做为关键字保存选中项(分页操作不会改变选中项)
            false - 根据行在当前页的表中的索引做为关键字保存选中项(分页后,选中项会发生改变。比如,在第一页选中了第一行,那么分页到第二页的时候选此页的第一行就会被当成选中项,也就是选中项发生了改变)
    
-->

    
<asp:GridView ID="gridView" runat="server" AllowPaging="True" DataSourceID="ObjectDataSource1"
        CellPadding
="4" ForeColor="#333333" GridLines="None" EnablePersistedSelection="true"
        DataKeyNames
="productId">
        
<AlternatingRowStyle BackColor="White"

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET——From验证:全部代码及讲解发布时间:2022-07-10
下一篇:
C#-WebForm-★ASP.NET中的母版页★发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap