Asp.Net MVC温故而知新【8】- 生成的代码详解

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

打开文件 ControllersMoviesController,检查生成的 Index 方法。MoviesController 的包含Index 方法的部分代码如下:

代码清单1:MoviesController.cs

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/
    public ActionResult Index()
    {
        return View(db.Movie.ToList());
    }

MovieController 类中,包含了 MovieDBContext 类的实例,你可以使用它进行查询、编辑和删除电影。

MoviesControllerIndex 方法将返回所有数据库中的电影数据,然后将结果传递给 Index 视图。

强类型模型和@model关键字

在之前的章节中,我们已经介绍了如果使用 ViewBag 将数据从控制器传递给视图。ViewBag 是一个动态对象,提供了一个便捷的后期绑定的方式将数据传递给视图。

ASP.NET MVC 同样提供了传递强类型数据或对象到视图的功能。这种强类型的方式提供了更好的编译时检查和更丰富的智能感知,Visual Studio 中的脚手架机制在创建 MoviesController 类和视图的时候使用了这种方式。

检查 ControllersMoviesController.cs 文件中的 Details 方法,下面是Detais方法的部分代码:

代码清单2:Details 方法 – ControllersMoviesController.cs

public ActionResult Details(Int32 id)
{
    Movie movie = db.Movie.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

参数 id 通常会作为路由数据传递给控制器,例如 http://localhost:1234/movies/details/1 将会设置控制器为 MoviesController,操作为 Details,参数 id 为1。你还可以通过查询字符串传递 idhttp://localhost:1234/movies/details?id=1

如果找到了电影信息,一个电影的模型就会传递给Details视图。检查一下 ViewsMoviesDetails.cshtml 文件的内容。

通过文件顶部的@model 语句,你就知道这个视图所期望的什么类型的对象。当你创建了电影控制器,Visual Studio 将会自动在Details.cshtml 文件顶部包含如下语句:

代码清单3:@model语句 – Details.cshtml

@model MvcMovie.Models.Movie

@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影对象(注意,此时的Model对象是 Movie 类型)。例如,在Details.cshtml 模板中,代码将Movie的每一个字段通过强类型的 Model 对象传递给DisplayNameForDisplayFor HTML帮助方法。CreateEdit 方法也传递了一个Model给视图,此处不再多讲。

检查 Index.cshtml 模板和 MoviesController.cs 文件的 Index 方法,程序先创建好一个电影模型的列表对象,然后将创建好的列表对象通过View方法传递给视图:

代码清单4:Index 方法 – MoviesController.cs

public ActionResult Index()
{
    return View(db.Movie.ToList());
}

Visual Studio 自动在 Index.cshtml 文件顶部添加了@model 语句:

代码清单5:@model语句 – Index.cshtml

@model IEnumerable<MvcMovie.Models.Movie>

@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影列表对象(注意,此时的Model对象是 IEnumerable<Movie> 类型)。例如,在Index.cshtml模板中,代码通过foreach 语句循环强类型Model中的每个电影对象。

代码清单6:foreach 代码块 – Index.cshtml

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Genre)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

因为Model对象是强类型(IEnumerable<Movie>),每个循环中的 item 对象都是 Movie 类型的。这意味着你的代码具有更好的编译时检查和完整的智能感知支持: Continue reading “Asp.Net MVC温故而知新【8】- 生成的代码详解”

Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

在本节中,你将新建一个MoviesController 类,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中。

在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错。

在解决方法资源管理器的Controllers文件夹右键,选择”添加”>”支架”:

图1:添加Controller的菜单

image

在“添加支架”对话框,选择 MVC 5 Controller with read/write actions and views, using Entity Framework,然后单击“添加”按钮。 Continue reading “Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据”

Asp.Net MVC温故而知新【6】- 创建连接字符串

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

在上一节中,我们创建了MovieDBContext 类来连接数据库、处理Movie 对象和数据库记录的映射。你可能会问我们到底使用了哪个数据库?其实,在我们没有指定数据库的时候,Entity Framework 默认使用LocalDB 。在本节中我们将介绍如何在Web.config 文件中添加一个数据库连接。

SQL Server Express LocalDB

LocalDB 是SQL Server Express 数据库引擎的轻量级版本,LocalDB 运行在SQL Server Express 的特殊执行模式下,允许你使用数据库文件(例如 .mdf 文件)。通常情况下,LocalDB 数据库文件放在解决方案的 App_Data 文件夹下。

SQL Server Express 是不推荐用在 web 应用程序产品中的,其实准确的说,LocalDB 也不能用在 web 应用程序产品中,因为它设计的时候就没考虑和 IIS 一起使用。然而,一个LocalDB数据库可以很简单的迁移到SQL Server 或 SQL Azure。

在Visual Studio 2013(或 2012)中,Visual Studio 默认安装了LocalDB。

默认情况下,Entity Framework 会查找和对象上下文类同名的数据库连接(在这个项目中是 MovieDBContext)。

打开应用程序根目录的 Web.config 文件(不是在Views 目录中的Web.config)。文件位置如下图: Continue reading “Asp.Net MVC温故而知新【6】- 创建连接字符串”

Asp.Net MVC温故而知新【5】- 添加模型

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

在本节中,我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演“Model”的角色。

我们将使用.NET Framework平台上熟知的Entity Framework 数据访问技术来定义和使用这些模型。Entity Framework(简称EF)提供了一种叫做 Code First 的开发范例。Code First 允许你写一些简单的类来创建模型(这些通常被称为POCO类,即“plain old CLR object”)。这些类将会生成数据库,这是一种即简洁又快速的开发流程。

添加 Model 类

在解决方案资源管理器中,右键 Models 文件夹,选择 “添加”>”类”。

图1:添加模型类的菜单
Continue reading “Asp.Net MVC温故而知新【5】- 添加模型”

Asp.Net MVC温故而知新【4】- 控制器传递数据给视图

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

在讨论数据库和模型之前,让我们先说说容控制器传递数据给视图。控制器类在响应传入的请求时被调用,控制器类是你写代码处理浏览器请求、从数据库中检索数据、并最终决定发送什么类型的响应给浏览器。视图模板被控制器用来生成和格式化HTML响应给浏览器。

控制器的责任是为视图模板提供必须的数据或对象,用来绘制HTML响应浏览器。一个最佳实践是:视图模板从来不参与业务逻辑,或直接与数据库交互。相反的,视图模板仅与控制器提供的数据一起工作。保持这种“关注点分离(separation of concerns)”有助于保持代码的整洁,可测试性和更容易维护。

目前,HelloWorldController 类中的 Welcome 方法需要两个参数:namenumTimes,然后直接与将值输出给浏览器。让我们修改控制器,使用视图来替换直接相应string字符串。视图模板会生成一个动态响应,这意味着你需要通过控制器传递一些数据用来生成响应。要做到这些,你需要通过在控制器中将数据(参数)放到ViewBag对象中,视图可以访问ViewBag对象。

回到 HelloWorldController.cs 文件中,修改Welcome方法,在ViewBag对象中添加一个Message和NumTimes值。ViewBag是dynamic 类型的对象,你可以为它添加任何你想要的数据,ViewBag对象在你添加数据之前,不具有任何属性。ASP.NET MVC 模型绑定系统从地址参数中自动映射命名的参数(namenumTimes)到方法中。完整的HelloWorldController.cs文件如下:

代码清单1:HelloWorldController.cs文件

using System.Web;
using System.Web.Mvc;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Welcome(string name, int numTimes = 1)
        {
            ViewBag.Message = "Hello " + name;
            ViewBag.NumTimes = numTimes;

            return View();
        }
    }
}

现在ViewBag对象已经包含了数据,它会被自动传递给视图。

Continue reading “Asp.Net MVC温故而知新【4】- 控制器传递数据给视图”

Asp.Net MVC温故而知新【3】- 修改视图和布局页

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

首先,你希望改变页面顶部的“Application name”链接,这段文字在每个页面都有,是公用的。尽管它出现在程序中的每个页面,但实际上它只写在一个地方。在解决方案资源管理器中找到 /Views/Shared 文件夹,打开_Layout.cshtml 文件。这个页面叫做布局页,放在所有页面都能用的共享文件夹中。

图1:_Layout.cshtml文件的位置
Continue reading “Asp.Net MVC温故而知新【3】- 修改视图和布局页”

Asp.Net MVC温故而知新【2】-添加视图

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

在本节内容中,我们将修改HelloWorldController类,使用视图模板来干净利索的封装生成HTML响应客户端的过程。

我们将使用Razor视图引擎创建一个视图模板文件。Razor-based 视图模板文件以.cshtml结尾,提供一种优雅的方式使用C#创建HTML输出。Razor可以使编写模板文件的字符数和按键数降到最低,并可以快速的、流畅的编码。

目前控制器类中的Index方法通过硬编码返回一个字符串消息。修改Index方法使其返回一个View对象,代码如下:

代码清单1:Index方法 – HelloWorldController.cs

public ActionResult Index()
{
    return View();
}

代码清单1中的Index方法使用一个视图模板生成HTML返回给浏览器,控制器方法(也叫做action methods),像Index方法一样,通常返回一个ActionResult(或继承自ActionResult),而不是像字符串一样的原始类型。

首先,为HelloWorld控制器创建一个视图文件夹。右键Views,单击“添加”>“新建文件夹”:

图1:新建文件夹菜单

Continue reading “Asp.Net MVC温故而知新【2】-添加视图”

Asp.Net MVC温故而知新【1】-添加控制器

  1. Asp.Net MVC温故而知新【1】-添加控制器
  2. Asp.Net MVC温故而知新【2】-添加视图
  3. Asp.Net MVC温故而知新【3】- 修改视图和布局页
  4. Asp.Net MVC温故而知新【4】- 控制器传递数据给视图
  5. Asp.Net MVC温故而知新【5】- 添加模型
  6. Asp.Net MVC温故而知新【6】- 创建连接字符串
  7. Asp.Net MVC温故而知新【7】- 通过控制器访问模型的数据
  8. Asp.Net MVC温故而知新【8】- 生成的代码详解
  9. Asp.Net MVC温故而知新【9】- 使用 SQL Server LocalDB
  10. Asp.Net MVC温故而知新【10】- Edit方法和Edit视图详解
  11. Asp.Net MVC温故而知新【11】- 添加查询
  12. Asp.Net MVC温故而知新【12】- 数据迁移之添加字段
  13. Asp.Net MVC温故而知新【13】- 添加验证
  14. Asp.Net MVC温故而知新【14】- Details 和 Delete 方法详解

下一个项目使用Asp.Net MVC技术进行开发,以前也用过,好几年没用了,今天没事便找了个教程,复习了一下,是Asp.Net MVC4框架,觉得浅显易懂,便复制收藏了。

MVC代表了模型-视图-控制器。MVC是一个架构良好,可测试性和易于维护的应用程序开发模式。基于MVC模式的应用程序包含:

  • 模型:模型类代表了应用程序中的数据,为强制执行业务规则使用了数据逻辑验证。
  • 视图:应用程序中的视图模板文件用来动态生成HTML响应。
  • 控制器:控制器类处理传入的浏览器请求,获取模型数据,然后指定视图模板,将响应返回给浏览器。

我们将在本教程系列涵盖了所有这些概念,并告诉你如何使用它们来构建应用程序。

首先,让我们创建一个控制器类。在“解决方案资源管理器”中,右键“Controllers”文件夹,然后选择“添加”>“支架”:

图1:添加控制器的菜单

Continue reading “Asp.Net MVC温故而知新【1】-添加控制器”

.NET Framework 类库简介

命名空间 说明
System System   命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。
System.Activities System.Activities 命名空间包含在 Window Workflow Foundation 中创建和处理活动所需要的所有类。
System.AddIn System.AddIn 命名空间包含具有以下用途的类型:确定、注册、激活和控制加载项,允许加载项与主机应用程序进行通信。
System.CodeDom System.CodeDom 命名空间包含具有以下功能的类:代表源代码文档的元素,支持生成用被支持的编程语言编写的源代码并进行编译。
System.Collections System.Collections 命名空间包含具有以下功能的类型:定义各种标准的、专门的、通用的集合对象。
System.ComponentModel System.ComponentModel 命名空间包含具有以下功能的类型:实现组件和控件的运行时和设计时行为。子命名空间支持 Managed Extensibility Framework (MEF),提供用于为 ASP.NET 动态数据控件定义元数据的特性类,包含用于定义组件及其用户界面的设计时行为的类型。
System.Configuration System.Configuration 命名空间包含具有以下用途的类型:处理配置数据,如计算机或应用程序配置文件中的数据。子命名空间包含具有以下用途的类型:配置程序集,编写组件的自定义安装程序,支持用于在客户端和服务器应用程序中添加或删除功能的可插入模型。
System.Data System.Data 包含具有以下用途的类:访问和管理多种不同来源的数据。顶层命名空间和许多子命名空间一起形成 ADO.NET 体系结构和 ADO.NET 数据提供程序。例如,提供程序可用于 SQL Server、Oracle、ODBC 和 OleDB。其他子命名空间包含由 ADO.NET 实体数据模型 (EDM) 和 WCF 数据服务使用的类。
System.Deployment System.Deployment 命名空间包含具有以下功能的类型:支持部署 ClickOnce 应用程序。
System.Device.Location System.Device.Location   命名空间使应用程序开发人员可通过使用一个 API 方便地访问计算机的位置。位置信息可能来自多个提供程序,例如 GPS、Wi-Fi 三角测量和移动电话塔三角测量。System.Device.Location   类提供一个 API,用于在一台计算机上封装多个位置提供程序,并支持在这些提供程序之间无缝地区分优先级和转换。  因此,使用此 API 的应用程序开发人员不需要定制应用程序特定的硬件配置。
System.Diagnostics System.Diagnostics 命名空间包含具有以下功能的类型:能让您与系统进程、事件日志和性能计数器之间进行交互。子命名空间包含具有以下功能的类型:与代码分析工具进行交互,支持协定,扩展对应用程序监控和检测的设计时支持,使用 Windows 事件跟踪 (ETW) 跟踪子系统来记录事件数据,在事件日志中进行读取和写入,收集性能数据,以及读取和写入调试符号信息。
System.DirectoryServices System.DirectoryServices 命名空间包含具有以下功能的类型:能让您通过托管代码访问 Active Directory。
System.Drawing System.Drawing 父命名空间包含具有以下功能的类型:支持基本的 GDI+ 图形功能。子命名空间支持高级二维和矢量图形功能、高级成像功能,以及与打印有关的服务和排印服务。另外,子命名空间还包含具有以下功能的类型:扩展设计时用户界面逻辑和绘图。
System.Dynamic System.Dynamic   命名空间提供支持动态语言运行时的类和接口。
System.EnterpriseServices System.EnterpriseServices 命名空间包含具有以下功能的类型:定义 COM+ 服务体系结构,从而为企业应用程序提供基础结构。子命名空间支持补偿资源管理器 (CRM),这是一个 COM+ 服务,允许将非事务性对象包含在 Microsoft 分布式事务协调程序 (DTC) 事务中。子命名空间在下表中有简要介绍,在此参考中有详细记录。
System.Globalization System.Globalization   命名空间包含定义区域性相关信息的类,这些信息包括语言,国家/地区,正在使用的日历,日期、货币和数字的格式模式,以及字符串的排序顺序。这些类对于编写全球化(国际化)应用程序很有用。  而像 StringInfoTextInfo 这样的类更是为我们提供了诸如代理项支持和文本元素处理等高级全球化功能。
System.IdentityModel System.IdentityModel 命名空间包含用于为 .NET 应用程序提供身份验证和授权的类型。
System.IO System.IO 命名空间包含具有以下功能的类型:支持输入和输出,包括以同步或异步方式在流中读取和写入数据、压缩流中的数据、创建和使用独立存储区、将文件映射到应用程序的逻辑地址空间、将多个数据对象存储在一个容器中、使用匿名或命名管道进行通信、实现自定义日志记录,以及处理出入串行端口的数据流。
System.Linq System.Linq 命名空间包含具有以下功能的类型:支持使用语言集成查询 (LINQ) 的查询。这包括具有以下功能的类型:代表查询成为表达式树中的对象。
System.Management System.Management 命名空间包含具有以下功能的类型:能让您访问有关系统、设备和应用程序的管理信息和管理事件(纳入 Windows Management Instrumentation (WMI) 基础结构中)。另外,这些命名空间还包含检测应用程序所需的类型,可使检测应用程序将其管理信息和事件通过 WMI 展示给潜在的客户。
System.Media System.Media   命名空间包含用于播放声音文件和访问系统提供的声音的类。
System.Messaging System.Messaging 命名空间包含具有以下功能的类型:能让您连接、监控和管理网络上的消息队列,以及发送、接收或查看消息。子命名空间包含具有以下用途的类:扩展对消息类的设计时支持。
System.Net System.Net 命名空间包含具有以下功能的类型:提供适用于许多网络协议的简单编程接口,以编程方式访问和更新 System.Net 命名空间的配置设置,定义 Web 资源的缓存策略,撰写和发送电子邮件,代表多用途 Internet 邮件交换 (MIME) 标头,访问网络流量数据和网络地址信息,以及访问对等网络功能。另外,其他子命名空间还能让您以受控方式实现 Windows 套接字 (Winsock) 接口,能让您访问网络流以实现主机之间的安全通信。
System.Numerics 包含补充由 .NET Framework 定义的数值基元(例如 ByteDoubleInt32)的数值类型的 System.Numerics 命名空间。
System.Printing System.Printing 命名空间包含具有以下功能的类型:支持打印,允许访问打印系统对象的属性,允许将其属性设置快速复制到另一个相同类型的对象,支持受控 System.PrintTicket 对象和非受控 GDI DEVMODE 结构的相互转换。
System.Reflection System.Reflection 命名空间包含具有以下功能的类型:能让您以受控方式查看加载的类型、方法和字段,能够动态创建和调用类型。子命名空间包含具有以下功能的类型:能让编译器或其他工具发出元数据和 Microsoft 中间语言 (MSIL)。
System.Resources System.Resources 命名空间包含具有以下功能的类型:能让开发人员创建、存储和管理应用程序的区域性特定资源。
System.Runtime System.Runtime 命名空间包含具有以下功能的类型:支持应用程序与公共语言运行时的交互,支持应用程序数据缓存、高级异常处理、应用程序域内的应用程序激活、COM 互操作、分布式应用程序、序列化和反序列化,以及版本控制等功能。另外,其他子命名空间还能让编译器编写人员指定特性来影响公共语言运行时的运行时行为,在一组代码和其他依赖它的代码之间定义可靠性协定,以及实现 Windows Communication Foundation (WCF) 的持久性提供程序。
System.Runtime.InteropServices.CustomMarshalers 提供 .NET Framework 的内部封送处理支持。
System.Security System.Security 命名空间包含具有以下功能的类:代表 .NET Framework 安全性系统和权限。子命名空间提供具有以下功能的类型:控制对安全对象的访问并进行审核,允许进行身份验证,提供加密服务,根据策略控制对操作和资源的访问,以及支持应用程序创建的内容的权限管理。
System.ServiceModel System.ServiceModel 命名空间包含生成 Windows Communication Foundation (WCF) 服务和客户端应用程序所需要的类型。
System.ServiceProcess System.ServiceProcess 命名空间包含具有以下功能的类型:能让您实现、安装和控制 Windows 服务应用程序,扩展对 Windows 服务应用程序的设计时支持。
System.Speech System.Speech 命名空间包含支持语音识别的类型。
System.Text System.Text 命名空间包含用于字符编码和字符串操作的类型。还有一个子命名空间能让您使用正则表达式来处理文本。
System.Threading System.Threading 命名空间包含启用多线程编程的类型。还有一个子命名空间提供可简化并发和异步代码编写工作的类型。
System.Threading.Tasks.Dataflow System.Threading.Tasks.Dataflow   命名空间提供对处理通过为粗粒度数据流和流水线操作任务?消息的基于角色的编程模型。有关更多信息,请参见 数据流(任务并行库)
System.Timers System.Timers   命名空间提供 Timer 组件,它使您可以在指定的间隔是引发事件。
System.Transactions System.Transactions 命名空间包含具有以下功能的类型:支持具有多个分布式参与者、多个阶段通知和持久登记的事务。还有一个子命名空间包含具有以下功能的类型:描述 System.Transactions 使用的配置选项。
System.Web System.Web 命名空间包含启用浏览器/服务器通信的类型。子命名空间包含具有以下功能的类型:支持 ASP.NET 窗体身份验证、应用程序服务、服务器上的数据缓存、ASP.NET 应用程序配置、动态数据、HTTP 处理程序、JSON 序列化、将 AJAX 功能并入 ASP.NET, ASP.NET 安全性中,以及 Web 服务。
System.Windows System.Windows 命名空间包含在 Windows Presentation Foundation (WPF) 应用程序中使用的类型,包括动画客户端、用户界面控件、数据绑定和类型转换。System.Windows.Forms 及其子命名空间用于开发 Windows 窗体应用程序。
System.Workflow System.Workflow 命名空间包含具有以下用途的类型:开发使用 Windows Workflow Foundation 的应用程序。这些类型为规则和活动提供设计时和运行时支持,以便配置、控制、托管和调试工作流运行时引擎。
System.Xaml System.Xaml 命名空间包含具有以下功能的类型:支持解析和处理可扩展应用程序标记语言 (XAML)。
System.Xml System.Xml 命名空间包含用于处理 XML 的类型。子命名空间支持 XML 文档或流的序列化、XSD 架构、XQuery 1.0 和 XPath 2.0,以及 LINQ to XML(这是一个内存中 XML 编程接口,方便修改 XML 文档)。
Accessibility Accessibility   及其公开的所有成员都属于组件对象模型 (COM) 辅助功能接口的托管包装的一部分。
Microsoft.Activities Microsoft.Activities 命名空间包含支持针对 Windows Workflow Foundation 应用程序的 MSBuild 和调试器扩展的类型。
Microsoft.Build Microsoft.Build 命名空间包含具有以下功能的类型:以编程方式访问和控制 MSBuild 引擎。
Microsoft.CSharp Microsoft.CSharp 命名空间包含具有以下功能的类型:支持生成和编译用 C# 语言编写的源代码,支持动态语言运行时 (DLR) 和 C# 之间进行互操作。
Microsoft.JScript Microsoft.JScript 命名空间包含具有以下功能的类:支持用 JScript 语言生成代码和进行编译。
Microsoft.SqlServer.Server Microsoft.SqlServer.Server   命名空间包含将 Microsoft .NET Framework 公共语言运行时 (CLR) 集成到 Microsoft SQL Server 和 SQL Server 数据库引擎进程执行环境时所要用到的类、接口和枚举。
Microsoft.VisualBasic Microsoft.VisualBasic 命名空间包含具有以下功能的类:支持用 Visual Basic 语言生成代码和进行编译。子命名空间包含具有以下功能的类型:为 Visual Basic 编译器提供服务,支持 Visual Basic 应用程序模型、My 命名空间、lambda 表达式和代码转换。
Microsoft.VisualC Microsoft.VisualC 命名空间包含具有以下功能的类型:支持 Visual C++ 编译器,实现 STL/CLR 库和 STL/CLR 库通用接口。
Microsoft.Win32 Microsoft.Win32 命名空间提供具有以下功能的类型:处理操作系统引发的事件,操纵系统注册表,代表文件和操作系统句柄。
Microsoft.Windows Microsoft.Windows 命名空间包含支持 Windows Presentation Framework (WPF) 应用程序中的主题和预览的类型。
UIAutomationClientsideProviders 包含单个映射客户端自动化提供程序的类型。
XamlGeneratedNamespace 包含不用于从代码中直接使用的编译器生成的类型。

自动切换IE代理设置,通过使用IE自动配置脚本

1. 什么是IE自动配置脚本
IE自动配置脚本起的作用就是,当IE访问网页的时候会根据脚本文件里面界定的内容来访问。比方说,你在脚本文件里面限定了访问某些IP使用某个代理的时候,访问另外一些IP使用另外的代理,这就很方便通过脚本文件来完成。

2. 如何创建、编辑IE自动配置脚本
1)创建:打开WINDOWS自带的记事本,编辑好代码后另存为“.PAC”格式
2)编辑:使用WINDOWS自带的记事本即可。

3. 如何编写IE自动配置脚本
最简单的格式就是包含一个叫FindProxyForURL的JScript函数,IE通过传入两个变量来调用这个函数,一个是用户浏览的地址URL全路经,一个是这个URL中的主机名部分(host)。

这个FindProxyForURL函数有三种可能的字符串返回值,一是”DIRECT”,就是直接连接,不通过代理;二是”PROXY proxyaddr:port”,其中proxyaddr和port分别是代理的地址和代理的端口;三是”SOCKS socksaddr:port”,其中socksaddr和port分别是socks代理的地址和端口,一个自动代理文件可以是多个选择的组合,其中用分号(;)隔开,如:

function FindProxyForURL(url,host)

{

if (host == "www.mydomain.com")

return "DIRECT";

return "PROXY myproxy:80;

PROXY myotherproxy:8080;

DIRECT";

}

把以上代码另存为proxy.pac的文件,如:c:\proxy.pac,然后在IE的菜单里”工具”->”INTEL选项”->”连接”->局域网设置->把使用自动配置脚本选上,然后在地址栏填入file://c:/proxy.pac,注意file后是两斜杠,要使设置生效,需要关闭IE再重新打开.

现在我们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可以使用,要实现自动配置代理,需要实现FindProxyForURL这个函数,其参数url代表要访问的连接,host代表要访问连接的主机名,该函数有三个返回参数( direct:直接连接,proxy IP:PORT,socket IP:PORT), 返回结果大小写不敏感.

PAC脚本另外一个重要的应用是多台代理服务器并存的情况下,通过pac脚本的控制,可以实现如下目标:

使用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;

使管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;

让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;

根据访问目的地的不同,自动选择最佳代理服务器。

下面我们介绍几个常用的PAC函数,并举便说明:

1. isPlainHostName(host),判断是否为本地主机,例如以http://myservername/的方式访问,则是直接连接,否则使用代理

function FindProxyForURL(url, host)

{

if (isPlainHostName(host))

return "DIRECT";

else

return "PROXY proxy:80";

}

2. dnsDomainIs(host, “”)、localHostOrDomainIs(host, “”),判断所访问主机是否属于某个域和某个域名,例如属于.company.com域的主机名,www.company.com和home.company.com的直接连接,否则使用代理访问。

function FindProxyForURL(url, host)

{

if ((isPlainHostName(host) ||

dnsDomainIs(host, ".company.com")) &&

!localHostOrDomainIs(host, "www.company.com") &&

!localHostOrDomainIs(host, "home.company.com"))

return "DIRECT";

else

return "PROXY proxy:80";

}

3. isResolvable(host),判断被访问主机名能否被解析.例子演示主机名能否被dns服务器解析,如果能直接访问,否则就通过代理访问。

function FindProxyForURL(url, host)

{

if (isResolvable(host))

return "DIRECT";

else

return "PROXY proxy:80";

}

4. isInNet(host, “”, “”),判断IP是否在某个子网内.例子演示访问IP段的主页不使用代理。

function FindProxyForURL(url, host)

{

if (isInNet(host, "10.0.0.0", "255.255.0.0"))

return "DIRECT";

else

return "PROXY proxy:80";

}

5. shExpMatch(host, “”),判断被访问主机名是否符合某一正则表达式.本例演示根据主机域名来改变连接类型,本地主机、*.edu、*.com分别用不同的连接方式。

function FindProxyForURL(url, host)

{

if (isPlainHostName(host))

return "DIRECT";

else if (shExpMatch(host, "*.com"))

return "PROXY comproxy:80";

else if (shExpMatch(host, "*.edu"))

return "PROXY eduproxy:80";

else

return "PROXY proxy:80";

}

6. url.substring(),取URL字符串的子串.本例演示根据不同的协议来选择不同的代理,http、https、ftp、gopher分别使用不同的代理。

function FindProxyForURL(url, host)

{

if (url.substring(0, 5) == "http:") {

return "PROXY proxy:80";

}

else if (url.substring(0, 4) == "ftp:") {

return "PROXY fproxy:80";

}

else if (url.substring(0, 7) == "gopher:") {

return "PROXY gproxy";

}

else if (url.substring(0, 6) == "https:") {

return "PROXY secproxy:8080";

}

else {

return "DIRECT";

}

}

7. dnsResolve(host),解析地址.本例演示判断访问主机是否某个IP,如果是就使用代理,否则直接连接。

function FindProxyForURL(url, host)

{

if (dnsResolve(host) == "166.111.8.237") {

return "PROXY secproxy:8080";

}

else {

return "PROXY proxy:80";

}

}

8. myIpAddress(),返回自己的IP地址.本例演示判断本地IP是否某个IP,如果是就使用代理,否则直接使用连接。

function FindProxyForURL(url, host)

{

if (myIpAddress() == "10.1.1.1") {

return "PROXY proxy:80";

}

else {

return "DIRECT";

}

}

9. dnsDomainLevels(host),返回被访问主机域名级数.本例演示访问主机的域名级数是几级,就是域名有几个点,如果域名中有点,就通过代理访问,否则直接连接。

function FindProxyForURL(url, host)

{

if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0

return "PROXY proxy:80";

}

return "DIRECT";

}

10. weekdayRange(),判断当前日期日否在某一星期段.本例演示当前日期的范围来改变使用代理,如果是GMT时间周三到周六,使用代理连接,否则直接连接。

function FindProxyForURL(url, host)

{

if(weekdayRange("WED", "SAT", "GMT"))

return "PROXY proxy:80";

else

return "DIRECT";

}

11. 最后一个例子是演示随机使用代理,这样可以好好利用代理服务器。

function FindProxyForURL(url,host)

{

return randomProxy();

}

function randomProxy()

{

switch( Math.floor( Math.random() * 5 ) )

{

case 0:

return "PROXY proxy1:80";

break;

case 1:

return "PROXY proxy2:80";

break;

case 2:

return "PROXY proxy3:80";

break;

case 3:

return "PROXY proxy4:80";

break;

case 4:

return "PROXY proxy5:80";

break;

}

}