.NET4.0新特性之ASP.NET 4.0

IDE 在ASP.NET 开发上的增强

代码片段(Code Snippets:

    代码段是预先开发的代码模板,可以节省我们对有关语法思考的时间。在VS 2005VS 2008中,已经有建立了很多代码段。不过,这些只适用于隐藏代码(code behind)。在VS 2010中代码片段支持JScriptHTML以及asp.net标记。在下面画面,展示了JScriptHTML片段的快捷菜单。

JS中:

Html

Generate From Usage

    ASP.Net以前的版本,微软推出了从现有的代码中进行代码重构来生成方法,在In ASP.NET 4.0 中, Generate From Usage 有了新概念,能基于现有的代码来生成属性,方法,类和的其它类型。

    写一些代码,选中它,右击最右侧的字符,你将得到去提取属性和方法的选项。此选项仅当你没有定义过这个标识符才显示。对于下面的例子智能感应不会显示选项来提取属性,例如,如果您右键点击变量 i

MultiMonitor

    Visual Studio 2010 给我们提供能将IDE的窗体移动 visual studio IDE之外,将它放至在桌面上。它还支持多面去地去看不同的IDE窗体。如果我们关闭Visual Studio,并再次打开它,我们会发现所有的窗体在我们最后一次放置的地方。

ASP.NET 完善性改进、SEO增强

EnablePersistedSelection

    当我们选择像datalist 或者gridview 控件中的一行时,如果我们移动到另一个网页,在新的页上,它选择同编号行,虽然我们只在第一页选择了它。

    为了避免这个,ASP.Net 4.0为这些控件推出了一种新的属性,这是EnablePersistedSelection。如果设置为true,在其他网页中,将不能选择同一编号。例如,导航到原始网页,第一页将显示选定的最初选定的行。

URL Routing:

    现在,我们看到网站的URL是更具体的SEO。不显示任何描述性信息,例如,不是显示网址 : http://mywebsite.com/userprofiles.aspx?userid=1 ,开发者更愿意显示: http://mywebsite.com/mydetails。在asp.net 2.0URL映射为我们提供了一个选项,在一定程度上实现此功能。我们可以提供确切的网址导航和URL显示给用户。

    Url routing在asp.net 3.5中引入。开发者创建不同的route处理类取决于网站url routings的数量。由于有url routing选项,回发的问题能被解决。

    在asp.net 4.0中你不需要为每个单独的处理程序类来定义routing。建立一个辅助函数MapPageRoute,帮助您实现更快速的routing。这些routes在Application_Start中注册。对于这个在Global.asax SetRouting方法的示例中设置routing,第一个参数是routing的友好名称,第二个参数是检查URL进行模式匹配,第三个是在aspx页将这一功能为用户实施。

Global.asax中是:

protected void Application_Start(object sender, EventArgs e) 

    SetRouting(System.Web.Routing.RouteTable.Routes); 

private void SetRouting(System.Web.Routing.RouteCollection routeCollection) 

    routeCollection.MapPageRoute("RouteFriendlyName""MyWebsite/RequestParameterName",
        "~/Book.aspx"); 
    // you can add other page routes with different names and combinations here 
}

现在Book.aspx将使用下面的代码进行进一步处理。

string Parameter = Page.RouteData.Values["RequestParameterName"].ToString(); 
if (Parameter=="Chemistry"){....} 
else if (Parameter=="Physics"){....}

 现在,如果条件满足,如果我们将首先浏览到localhost / MyWebsite /Chemistry 。

Compressing Session Values

    ASP.NET session外的进程的状态值保存在数据库或服务器上。这些都是以序列化格式保存。发送到服务器时候,更多更大的session将消耗更多的资源 。现在,这些可以被压缩在一个新的构建compressionEnabled属性中。这种对sessionState元素属性,可以在web.config这样被声明。

<sessionState
mode="SQLServer" stateConnectionString="connectionstring goes here" 
compressionEnabled="true"/>

此选项将用于session外的进程。

Meta Tags

    HtmlMeta类可用于动态添加HTML meta的标签和HTMLMeta的名称,内容属性可以被用来在运行时动态添加任何继标记名称和它的值。

    asp.net 4.0 Page类中有两个属性MetaDescriptionMetaKeywords。这些可以用来在运行时在html中为descriptionkeyword元素添加 meta 的值。这些可以在HTML中提及页面属性或以这种方式:

Page.MetaDescription = "this is meta description";
Page.MetaKeywords = "this is a meta keyword";

    如果这样我们看到这样的HTML生成:

<head>
<meta name="description" content="this is meta description " />
<meta name="keywords" content="this is a meta keyword" />
</head>

Generating Client IDs

    web控件的客户端ID是根据父控件ID动态的产生。 所以,如果你在一个用户控件中使用textbox,我们必须查看为它生产什么样ID,才能在客户端的脚本中直接使用。

    有时这些是动态的改变用户控件的名称也更改它的子控件ID。在asp.net 4.0中,这个问题是可以由页面的ClientIDMode属性解决。它有如下可能的值:AutoID , Static, Predictable Inherit

AutoID: webpage 的默认值,功能和以前 ASP.NET的版本一样。

Static:  为控件设置一个静态的ID,所以我们不需要当心父控件的ID,我们也能使用javascript引用它。

   例如一个用户控件里面的 textbox ,它外面胡一个ClientIDMode 设置为static

<asp:TextBox ID="textbox1" runat="server" clientIDMode="Static"></asp:TextBox> 
<uc1:WebUserControl ID="WebUserControl1" runat="server" />

    这个用户控件包含了textbox2

<asp:TextBox ID="TextBox2" ClientIDMode="Static" runat="server"></asp:TextBox>

   这个代码将产生下面的HTML

<input name="ctl00$MainContent$textbox1" type="text" id="textbox1" /> 
<input name="ctl00$MainContent$WebUserControl1$TextBox2" type="text" id="TextBox2" />

    如果我们移除ClientIDMode"static" ,输出胡HTML将会是:

<input name="ctl00$MainContent$textbox1" type="text" id="MainContent_textbox1" />

   它将产生象以前asp.net版本的textboxID

Predictable 如果gridview 或者listview控件中我们设置ClientIDMode的值为Predictable ,它将会串连控件IDGridviewID column的值在ClientIDRowSuffiex 属性上提到:

Gridview ID ="GridView1"
ClientIDMode="Predictable"
ClientIDRowSuffix="ItemID"

    如果在gridview的模板列中的有一个ID Label1label控件 ,它被绑定在ItemID 列上。

    它的ID将会是: ID= GridView1_Label1_200

    如果我们用数据绑定控件之外使用web控件,设置ClientIDMode等于Predictable

<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Predictable"></asp:TextBox>
<asp:Panel ID="panel1" runat="server">
<asp:TextBox ID="TextBox2" runat="server" ClientIDMode="Predictable"></asp:TextBox> 
</asp:Panel>

  你可以看到webcontrols在一个面板输出和另外一个再面板以外输出。<input name="ctl00$MainContent$TextBox1" type="text" id="MainContent_TextBox1" />
<div id="MainContent_panel1">
<input name="ctl00$MainContent$TextBox1" type="text" id="MainContent_TextBox1" />
</div>

   它将产生所有web控件的ID,是panel的页面的ID加上子控件的ID

Inherit: WEB控件默认是继承父容器的ID  控件能覆盖它父控件的属性。所以我能为ClientModeID设置不同的值。

Permanent Redirect

   在有些情况下,如果当前页面已经过时,我们希望将用户重定向到新开发的网页。 我们可以使用Response.Redirect转移页到新的页面。但是,在这种情况下,搜索引擎保存搜索索引的网页的旧信息。 另外,如果用户浏览到这个网页,他将被重定向到这个网页,然后用命令的response.redriect帮助新打开的一页。

    但在ASP.NET 4.0中一个新的命令Response.RedirectPermanent可用于更改服务器页上的头信息。因此,如果用户去为他直接重定向到新的一页,并为他节省了双行页面。在该网站和网页更新的发现头和更新其索引信息,展示最新的信息重新搜索索引同样的搜索引擎。

New Browser Definitions
   
ASP.net 3.5近几年,一些浏览器已经更新,其中包括Google chrome和那些支持blackberry智能手机。 ASP.Net 4.0HttpBrowserCapabilities类被更新符合支持新浏览器。

页面标记<%%>说起

Asp.Net4.0<%符号表达式%>有四种形式,分别为<%="hello world"%>,<%$expression%>,<%#expression%><%:abc%> 我们分别来看一下

<%:expression%>它是一个新增的表达式方式,表示将expression HtmlEncode后输出,如果这个表达式的类型时IhtmlString,它将通过IhtmlString接口的ToHtmlString()方法来做UrlEncode.Net 4.0HtmlString类通过实现这个接口,避免重复做HtmlEncode

例如:
  需要做HtmlEncode时使用表达式

<%: new HtmlString("<h1>I'a a test</h1>")%>

将输出

<h1>I'a a test</h1>

这个很酷的featureAsp.Net Mvc 2.0中被广泛使用。

这些表达式都出现在aspx页面上,在编译aspx页面时编译程序会使用正则比表达式将这些表达式解析成后台代码来执行

ASP.NET 语言、语法层面

Optional Parameters    

    asp.net 4之前,为了实现可选的参数,我们创建重载函数。但现在在C#中,可选参数没有更多的限制。但是象VB的可选参数必须放置到最后。例如:

public void FunctionOptionalParam(string Name, int Age, string Country = ""

     我们可以不提要求的可选参数的值。

FunctionOptionalParam("My Full Name",20);

Named Parameters:

    命名的参数可以忽略的参数顺序,在不同顺序的使用带名称的参数。例如:

public void FunctionNamedParam(int x, int y , int z)

     在函数调用将是:

FunctionNamedParam(x:1, z:3, y:2);

    在函数声明的顺序之前,虽然我们为参数设置了Z的值,但这些仍然等同于x = 1y = 2z3

posted @ 2011-05-12 13:25  藏积  阅读(454)  评论(0编辑  收藏  举报