首页 技术 正文
技术 2022年11月15日
0 收藏 504 点赞 4,499 浏览 4277 个字

  本章将使用 ASP.NET MVC 框架创建一个简单的数据录入应用程序。

  笔者会将过程分解成一个个的步骤,以便能够看出如何构造 ASP.NET MVC 应用程序。(对于一些未进行解释的内容,笔者提供了参考章节,在那里你会看到完整的细节)

  (由于各个 VS 版本不一样,有些功能用不了的话可以通过“工具”、“设置”、“专家设置”启用全部特性(新的版本可能不需要这一步))

第一步:创建新的 ASP.NET MVC 项目

    1、“新建项目”——“Web(Visual C#)”——“ASP.NET Web 应用程序”

    2、设置文件名、存储路径,单击“确定”按钮。

    3、(该模板创建的项目带有不同的起点和特性配置,如认证、导航以及视觉主题等)为了保持事情简单,选择“空模板”选项,并在“添加文件夹和核心引用”部分勾选“MVC”复选框。(这会创建一个基本的 MVC 项目,它带有最少的预定义内容,这也是本书用于所有示例的起点)

    (PS:其他模板选项意在为 ASP.NET 项目提供更为完整的起点。但笔者不喜欢这些模板,因为它们鼓励开发者将一些重要特性视为黑盒进行操作。本书的目标是为你提供知识并融合 MVC 应用程序的各个方面,因而本书所有示例使用的几乎是这个“空模板”)

第二步:添加一个控制器

    在 MVC 体系架构中,输入请求是由控制器(Controller)来处理的。(在 ASP.NET MVC 中,控制器通常是一些继承于 “Syster.Web.Mvc.Controller” 的 C# 类。“Syster.Web.Mvc.Controller”是框架内置的控制器基类)

    控制器中的每一个 public 方法(“类”,当然要有方法)都称为是一个动作方法——可以用某个 URL 通过 Web 来调用它执行一个动作。

    MVC 约定,将控制器放在 Controllers 的文件夹中,该文件夹是在建立项目时创建的。

    (提示:你不一定要遵循这一约定或其他大多数 MVC 约定,但笔者建议你还是遵循它——至少因为它有助于弄清本书示例的意思。(现在的编程方式提倡“约定优于配置”,这可以省去编程过程中很多琐碎的事情,故在可能的情况下,应当优先遵循约定))

   对项目添加控制器步骤如下:

    1、“右击“Controllers”文件夹”——“添加”——“控制器”

    2、在“添加支架”对话框中,选择“MVC 5-空控制器”选项,然后单击“添加”按钮。

    3、在“添加控制器”对话框中,将其名称设置为 “HomeController”,然后单击“添加”按钮。

    (控制器名称有几个约定:提供的控制器名称应当指明其目的;默认的控制器名称为“Home”;控制器名称具有“Controller”后缀)

    2.2.2 理解路由

       除了模型、视图、控制器之外,MVC 应用程序还使用 ASP.NET 的路由系统——它决定如何将 URL 映射到控

    制器和动作上。(当 Visual Studio 创建 MVC 项目时,会添加一些默认的路由,以使我们能够开始工作——你可以

    请求以下任何一个 URL(“/”、“/Home”、“/Home/Index”),它们都会被引向 HomeController 上的 Index 动作。

    (这受益于遵循 MVC 的约定——这里有一个名称为“HomeController ”的控制器))

       如果不遵循这种约定,则需要修改路由,以指向所创建的替代控制器。(可以打开“App_Start文件夹”中的

    “RouteConfig.cs文件”来查看和编辑路由配置。第16章和第17章将解释这个文件中的条目)对于这个简单示例,应用

    默认配置就行了。

第三步:渲染 Web 页面

    为了产生一个对浏览器的请求进行响应的 HTML,需要创建一个视图(View)。

    1、修改控制器中的方法(在 HomeController.cs 文件中修改 Index 方法,以渲染一个视图)

          public  ViewResult  Index ()

          { return View() ; }

        当从一个动作方法返回一个 ViewResult  对象时,便是在指示 MVC 去渲染一个视图。(调用不带参数的View 方法,便可以

      创建这个 ViewResult 对象。这是在告诉 MVC,去渲染该动作的默认视图)MVC 约定的另一个例子:视图是通过命名约定与动

      作方法相关联的。(在 “Views”文件夹中将生成与方法具有相同名字的视图文件)

    2、创建视图最简单的方法是要求 Visual Studio 来做这件事——在 HomeController.cs 文件的代码编辑窗口中定义 Index 动作

      方法的任意地方右击,然后从弹出的菜单中选择“添加视图”。

    3、在“添加视图”的对话框中配置待创建视图文件的初始内容:将“视图名”设置为“Index”(与该视图相关联的动作方法的名称,这是

      另一个约定)——将“模板”设置为“空模板无模型”——让“创建为分部视图”和“使用布局页”复选框处于未选状态——单击“添加”按钮,

      创建这一新的视图文件。

      (Visual Studio 将在 Views \ Home 文件夹中创建一个名称为 “Index.cshtml” 的视图文件。这是 MVC 框架的另一个约定:视图

      被放置在 Views 文件夹中,文件夹的结构是与其关联的控制器名称相对应的。)

        该文件主要含有 HTML 语句。不同的是会看到如下所示的部分:

          ……
          @{
            Layout = null;
          }
          ……

        这是一个将由 Razor 视图引擎进行解释的表达式,Razor 引擎处理视图内容并生成发送给浏览器的 HTML。(这里是一个简单
      的 Razor 表达式,它告诉 Razor 未选用布局——布局类似于发送给 HTML 模板)

        在 Index.cshtml 的 div 中可以添加 “Hello World ( from the view )”,这一添加显示了用 HTML 标记显示出来的消息(而不
      是由动作方法显示的字符串)。

        在最初编辑 Index 动作方法时,它返回的是一个字符串值,这意味着 MVC 除了把这个字符串传递给浏览器之外,未做其他

      事情。

        现在,Index 方法返回了一个 ViewResult,MVC 框架渲染了一个视图并返回了它所产生的HTML。(这里并未告诉 MVC 应该
      使用哪个视图,因此它会运用命名约定自动寻找一个视图。该约定是,视图包含在以控制器命名的文件夹之中,并且具有动作方法
      的名称:Views /Home /Index.cshtml)

        除了字符串和 ViewResult 对象之外,也可以从动作方法返回其他结果。例如,如果返回一个RedirectResult,浏览器将被重

      定向到另一个 URL。这些对象统称为动作结果,它们都派生于ActionResult 类。(动作结果系统使开发者能够在动作中封装并重用

      常用的响应,第17章将对其做更多介绍并演示一些更复杂的运用)

      2.3.2 添加动态输出

        Web 应用程序平台的关键是构造并显示动态输出。在 MVC 中,控制器的工作是构造一些数据,并将其传递给视图,而视图则

      负责把它渲染成 HTML。

      (现在有很多人都把“渲染”说成“呈现”,其实这种说法是不正确的。Web 页面从服务器到浏览器的整个呈现过程实际上分为三步:

      第一步是通过视图引擎对视图文件进行解释,将视图文件中的代码转换成 HTML 标记,这一步叫做渲染;第二步是将渲染后的

      HTML 标记传递给客户端浏览器,这一步是页面的传递;第三步是浏览器接收到 HTML 后对其进行处理并呈现为 Web 页面,这

      一步才叫做呈现。由此可见,渲染是把页面的非 HTML 代码转换成 HTML 标记,这一步工作是由服务器完成的)

        将数据从控制器传递给视图的一种方式是使用 ViewBag(视图包)对象,它是 Controller 基类的一个成员。ViewBag 是一种

      动态对象,可以给它赋任意属性,使这些属性的值在随后渲染的视图中是可用的。

      在 HomeController.cs 文件中设置一些视图数据:

          public ViewResult Index()

          {

            int hour = DateTime.Now.Hour;

            ViewBag.Greeting = hour < 12 ? “Good Morning” : “Good Afternoon”;

            return View();

          }

        当对 ViewBag.Greeting 属性进行赋值时,便是为视图提供数据。(Greeting 属性直到对其赋值的那一刻才会形成——这让

      作者能够以自如而流畅的方式(即不必提前定义类)将数据从控制器传递给视图)

        在视图中再次查阅 ViewBag.Greeting 属性,便可获得其数据值。

      在 Index.cshtml 文件中接收 ViewBag 的数据值:

          <div> @ViewBag.Greeting World ( from the view ) </div>   (这里是一个 Razor 表达式)

        当在控制器的 Index 方法中调用 View 方法时,MVC 框架会定位 Index.cshtml 视图文件,并要求 Razor 视图引擎解析该文

      件的内容。Razor 会寻找类似于在该清单中所添加的这种表达式,并处理它们。(在这个例子中,处理该表达式意味着在视图

      中插入作者在动作方法中赋给 ViewBag.Greeting 属性的值——这就是前面所提到的视图渲染过程)

        对属性名称 Greeting 没有特别要求,用任意属性名来代替,照样会正常工作,只要在控制器中使用的名称与视图中使用

      的名称相匹配即可。当然,通过对多个属性赋值,可以将多个属性值从控制器传递到视图。

  【上半部分结束】

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,111
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,584
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,203
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,838
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,922