65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 4.0、Visual Studio 2010 IDE 中的新特性

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.61/5 (88投票s)

2010年1月7日

CPOL

14分钟阅读

viewsIcon

389771

本文档介绍了 ASP.NET 4.0 和 Visual Studio 2010 IDE 中一些新特性的入门。

引言


本文档介绍了 ASP.NET 4.0 和 Visual Studio 2010 IDE 中一些新特性的入门。

代码片段


代码片段是预先开发的代码模板,可以节省思考语法的时间。VS2005 和 VS2008 中已经有很多内置的代码片段。但是,那些只适用于代码隐藏。VS2010 中的代码片段也被引入到 JScript、HTML 和 ASP.NET 标记中。在下面的截图中,我们可以看到 JScript 和 HTML 的不同片段上下文菜单。

script 标签内,将是

而在 HTML 内

新配置文件


我们已经看到过 .NET 之前版本的不同开发配置文件。如 VB、C#、Web 开发和通用开发。我们根据优先级选择配置文件。这些是在 Visual Studio 首次安装后选择的,或者从导入导出选项中选择。

在 VS2010 中,引入了两个新的配置文件,并且都支持 HTML 开发人员。它们是

  1. Web 开发
  2. Web 开发(代码优化)

Web 开发配置文件会在 HTML 模式下隐藏顶部的客户端对象和事件栏。

代码优化中,您会发现没有代码的 HTML 编辑器,以及设计器选项卡。因此,它在屏幕上提供了更大的区域来处理 HTML。

您可以在首次使用 Visual Studio 安装后选择一个配置文件。您还可以通过“工具”>“导入和导出设置”>“重置所有设置”选项来更改现有的工作配置文件。如果 IDE 中没有显示更改,则需要打开和关闭 Visual Studio。

根据使用情况生成


在 ASP.NET 的早期版本中,Microsoft 引入了代码重构来从现有代码生成方法和标识符。在 ASP.NET 4.0 中,有一个新的概念“根据使用情况生成”,它可以根据现有代码生成属性、方法、类和其他类型。

写一些代码,选中它,然后在最左边的字符上右键单击,您将获得将其更改为属性或方法的选项等。仅当您未定义标识符时,才会显示此选项。例如,在下面的示例中,如果您右键单击变量 i,则 intellisense 不会显示提取属性的选项。

多目标定位


在 VS2008 中,可以创建 2.0 或 3.0 版本的项目,而不是开发默认的 3.5 版本。此外,还有一个选项可以更改已开发项目的目标框架版本。

VS2010 中也提供了相同的选项,但有一个改进。在以前的版本中,如果您在框架 2.0 中创建项目,intellisense 仍会向您显示 3.5 版本的类型和成员,因此如果您无法识别所选框架的成员,则出错的可能性更大。但在 VS2010 中,intellisense 只会向您显示适合的框架的选项。

多显示器


Visual Studio 2010 为我们提供了将 IDE 窗口移出 Visual Studio IDE 并将其放置在桌面区域的功能。它还支持在多个显示器上拥有不同的 IDE 窗口。如果我们关闭 Visual Studio 并再次打开它,我们会发现所有窗口都与我们上次完成它们的位置相同。

类文件中的代码导航


代码导航

新的“导航至”选项使我们能够更快地在文件中搜索词语。它会在您输入时搜索文本,但仅适用于类文件,即不适用于 HTML 或代码隐藏文件。在下面的示例中,当我输入到“导航至”窗口时,它会显示函数名;选择任何一个,它都会导航到函数定义。

查看调用层次结构

此功能有助于查看函数及其属性的使用情况。例如,如果您右键单击函数名,它将显示函数使用情况的层次结构列表。

如果单击“查看调用层次结构”,将显示一个包含函数调用详细信息的窗口

在层次结构窗口中选择函数调用时,它将显示参数的详细信息以及函数调用的位置。

代码标识符高亮显示

选择标识符时,IDE 会为您高亮显示其使用的地方。例如,我选择了变量 i,它会高亮显示其使用的不同位置。

Intellisense 改进


在 VS2008 中,选择对象的属性时,intellisense 会根据您输入时的字母顺序显示属性。

在 VS2010 中,它会根据组显示属性。例如,如果您为文本框输入 text,它将显示基于 text 一词的成员,如 TextTextChangedTextMode。它还支持 Pascal 命名法 intellisense。例如,如果您输入 TC,它将导航到 TextChanged 成员。

在下面的图片中,您可以看到 4.0 版本中的 ClientIDMode 属性,如果我们从项目属性中更改其目标版本,它将不会为文本框显示此属性。

EnablePersistedSelection


DataListGridView 等控件中选择一行后,如果我们转到另一个页面索引,它会在新选择的页面上选择相同编号的行,尽管我们只在第一页上选择它。

为避免这种情况,ASP.NET 4.0 为这些控件引入了一个新属性,称为 EnablePersistedSelection。如果将其设置为 true,它将不会在其他页面上选择相同编号的行,并且在导航回原始页面(例如第一页)时,它会显示最初选择的行已被选择。

Web.Config 转换


通常,我们在开发环境中设置 web.config 中的一些值,然后在部署或测试时手动更改这些值。

例如,如果 web.config 文件中有一个连接字符串或任何键值对,并且我们想在项目发布或部署时替换它们,那么我们可以使用新的web.config 转换。这是一种执行此操作的自动化方法。

Web.config 设置可以在调试、发布时被其他配置文件(如 web.release.configweb.debug.config 等)覆盖。这些值不会在原始 web.config 中被覆盖,而是在已发布的 web.config 中被覆盖。

通过转换,我们可以替换、删除或删除节点,并且对于节点本身,我们可以删除或设置属性。例如

  1. 从“配置管理器”>“新建”创建配置文件

  2. 将其命名为 TransformWebConfig。从“复制设置来源”选项中选择“发布”。

    这将创建 TransformWebConfig.config

  3. 右键单击 web.config 并选择“添加配置转换”选项。打开 web.config 并添加一个测试键和要更改的值。
    <appSettings> 
      <add key="KeyOne" value="A value"/> 
    </appSettings>
  4. 打开 TransformWebConfig.config 并添加以下行
    <appSettings> 
      <add key="KeyOne" 
        value="TestOnConfigurationConfig" 
        xdt:Transform="Replace"
        xdt:Locator="Match(key)" /> 
    </appSettings>

    xdt:Transform 属性设置为 Replace

  5. 右键单击项目并选择“创建包”。VS 将从 TransformWebConfig.config 文件获取值,并为我们更改已发布 web.config 文件中的值。

生成成功后,转到 obj 文件夹,并在 TransformWebConfig 文件夹下检查 web.config 文件;您将看到 KeyOne 键的值为 TestOnConfigurationConfig

URL 路由


如今,我们看到网站 URL 更 SEO 化,不显示任何描述性信息。例如,与其显示 URL:http://mywebsite.com/userprofiles.aspx?userid=1,不如开发人员更喜欢显示 URL:http://mywebsite.com/mydetails

ASP.NET 2.0 中的 URL 映射为我们提供了一个在一定程度上实现此功能的选项。我们可以指定要导航的确切 URL 和要显示给用户的 URL。但在回发的情况下,此选项开始在浏览器中显示实际 URL。

URL 路由在 ASP.NET 3.5 中引入。开发人员必须根据网站的 URL 路由数量创建不同的路由处理程序类。回发问题已通过此 URL 路由选项解决。

在 ASP.NET 4.0 中,您不需要为每个路由定义单独的处理程序类。有一个内置的辅助函数 MapPageRoute,可以帮助您更快地实现路由。这些路由在 Application_Start 上注册。例如,在此示例中,在 global.asax 中,SetRouting 方法设置路由,第一个参数是路由的友好名称,第二个参数是检查要匹配的 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,它将转到第一个 if 条件。

添加引用对话框


在 Visual Studio 的早期版本中,打开“添加引用”对话框时,它需要一些时间来加载 .NET 程序集文件,直到它从 GAC 加载所有引用。在 VS2010 中,打开“添加引用”时,它默认打开“项目”选项卡。

如果您不小心单击了 .NET 或 COM 选项卡,在它加载所有程序集之前,您仍然可以选择取消。因此,VS IDE 不会像以前那样冻结。

压缩会话值


ASP.NET 会话进程外状态值保存在数据库或服务器上。它们以序列化格式保存。较大的会话值消耗更多资源才能发送到服务器。现在,可以使用新的内置属性 compressionEnabled 来压缩它们。可以在 web.config 中为 sessionState 元素指定此属性,如下所示

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

此选项将可用于进程外会话。

C# 4.0 的改进


.NET Framework 4.0 中的 C# 还有更多功能。它们是

  • 动态查找
  • 命名
  • 可选参数

动态查找

有一个名为 dynamic 的新静态类型。我们可以将其用作任何类型的对象。如果使用不当,我们只会在运行时收到错误。例如

dynamic integerValue = 1; 
dynamic stringValue = " a string"; 
dynamic Result = integerValue + stringValue;

其输出将是:1 a string

但是,如果您将最后一行更改为

dynamic Result = integerValue & stringValue;

您不会收到任何编译错误,但在运行时会收到以下错误

Operator '&' cannot be applied to operands of type 'int' and 'string'

可选参数

为了实现可选参数,在 ASP.NET 4 之前,我们通常会创建重载函数,但现在,可选参数不再是 C# 中的限制。像 VB 一样,可选参数必须放在最后。例如

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

我们可以调用它们而不指定可选参数的值。

FunctionOptionalParam("My Full Name",20);

命名参数

命名参数允许您忽略参数顺序,并以不同的顺序用名称指定参数。例如

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

在函数调用时,它将是

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

尽管我们在函数声明的顺序之前为参数 z 提供了值,但这将等于 x=1, y=2, z=3。

Meta 标签


HtmlMeta 类可用于动态添加 HTML meta 标签。HTMLMetaNameContent 属性可用于在运行时动态添加任何 meta 标签名称及其值。

在 ASP.NET 4.0 中,Page 类还有两个属性:MetaDescriptionMetaKeywords。这些可用于在运行时为 descriptionkeyword 元素在 HTML 中添加 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>

生成客户端 ID


Web 控件的客户端 ID 是根据其父控件动态生成的。因此,如果我们使用 WebForm 中的用户控件内的文本框,我们必须查看它生成的 ID 并相应地在客户端脚本中使用它。

有时,这些是动态的,或者在更改用户控件名称的情况下,它也会更改子控件的 ID。在 ASP.NET 4.0 中,此问题通过页面的 ClientIDMode 属性得到解决。它有以下可能的值:AutoIDStaticPredictableInherit

  • AutoID:这是网页的默认设置,其工作方式与以前的 ASP.NET 版本相同。
  • Static:它为 Web 控件设置静态 ID,因此如果我们通过 JavaScript 引用它,则无需担心父控件 ID 等。

    例如,用户控件中的 TextBox 和用户控件外的一个 TextBoxClientIDMode 设置为 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,输出将如下所示

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

    它将像以前的 ASP.NET 版本一样为 TextBox 生成 ID。

  • Predictable:如果我们为 GridViewListView 中的 Web 控件使用 Predictable 作为 ClientIDMode,它将把 GridView ID 与控件 ID 以及 ClientIDRowSuffiex 属性中提到的列值串联起来。
    Gridview ID ="GridView1"
    ClientIDMode="Predictable"
    ClientIDRowSuffix="ItemID"

    如果在 GridView 模板列中有 ID 为 Label1Label 并且它与 ItemID 列绑定,它将生成一个 ID,即 GridView1_Label1_200

    如果我们为数据绑定控件外部的 Web 控件使用 PredictableClientIDMode

    <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>

    您可以看到面板内和面板外的 Web 控件的输出。

    <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,并与子页面内容面板的 ID 串联。

  • Inherit:默认情况下,Web 控件继承自父容器 ID。如果我们为 ClientModeID 设置不同的值,控件也可以覆盖父级的此属性。

永久重定向


在当前页面已过时,需要将用户重定向到新开发页面的情况下,我们可以使用 Response.Redirect 将页面转移到新页面。但在这种情况下,搜索引擎会将其旧页面信息保留在索引中以供搜索。此外,如果用户导航到该页面,他将通过 Response.Redriect 被重定向到该页面,然后再重定向到新页面。

但在 ASP.NET 4.0 中,可以使用一个新命令 Response.RedirectPermanent 来更改服务器上页面的标头信息。因此,如果用户访问一个页面,他将直接被重定向到新页面,从而为他节省了往返的行程。

同样,搜索引擎在重新索引该网站和页面时,会找到更新的标头并更新其索引中的信息,并在搜索中显示更新的信息。

新的浏览器定义


在 ASP.NET 3.5 的最后几年里,出现了一些浏览器,包括 Google Chrome 和支持 Blackberry 智能手机的浏览器。ASP.NET 4.0 的 HTTPBrowserCapabilities 类已更新,支持新浏览器。

发布项目


在 VS2010 中,如果您在解决方案资源管理器中单击“属性”链接,您将找到三个新选项卡

  1. 包/发布
  2. 部署 SQL
  3. Silverlight 应用程序

我将讨论前两个选项。

包/发布

包、发布选项为您提供发布和包命令的设置。调试、发布的配置选项提供了像以前版本一样的编译和生成时的值设置选项。

如果托管服务器没有 SQL Express,或者您不想将它们包含在已发布的项目中,则从App_Data文件夹中选择“排除文件”。如果您选择“创建 ZIP 文件作为 Web 包”选项,它将创建一个要部署的 zip 文件。否则,默认情况下它将是一个未压缩的文件夹。

默认包文件夹创建在应用程序的obj文件夹下。除非选择“显示所有文件”选项,否则默认情况下它不会显示在解决方案资源管理器中。我们还可以设置服务器上的 Web 应用程序名称以及目标服务器的物理路径。

部署 SQL

“部署 SQL”选项允许您将连接字符串设置为已部署包的一部分。您可以手动添加具有不同名称和值的连接字符串,或通过单击“导入”按钮从web.config导入。您可以选择“仅架构”或数据库选项的脚本。选择连接字符串时,它会显示源设置,我们可以为目标服务器设置值。

您还可以通过单击“添加”按钮手动添加数据库脚本文件。您还可以更改在服务器上运行 SQL 文件的顺序。

© . All rights reserved.