巨大转变!ASP.NET MVC2用户界面新实践

2018 年 3 月 19 日2620

【IT168专稿】本篇中,我们将探讨ASP.NET MVC 2.0框架所支持的用户界面编程问题。在上一篇中,我们已经对此有了简单的了解,接下来我们还会详细讨论。首先,我们来看一下如何构建用户接口的问题。

  无论是在ASP.NET Web表单还是在MVC框架中,用户界面都要经历一个呈现的过程。在Web表单中,Page类使用一个呈现进程实现把控件层次翻译成浏览器端的HTML内容。隐藏代码文件负责提供影响这些控件状态的属性及方法,最终把每一个控件转换成浏览器端对应物。当然,页面生命周期也会影响这一过程。

  ASP.NET MVC则从根本上改变了上述过程。MVC不再是操作一个控件层次结构,而是采用自顶向下的模式进行直接呈现,这很类似于早期的ASP工作模式。然而,ASP.NET MVC和早期ASP之间的核心区别在于,MVC的业务逻辑是与视图层是分离的,而不是缠绕在一起的。每个视图都可以有自己对应的模型,可以直接访问“模型”(其中包含自控制器返回的数据)中的属性,从而实现直接引用特定于视图的数据。在这篇文章后面的示例中,你会看到我们将频繁地使用这一过程。

  对大多数开发人员而言,构建用户界面的方法可能是一个巨大的转变。例如,在Web表单中,如果你想通过编程方式在HEAD元素中添加一个样式表,他可以通过把代码放到Load事件处理程序中实现这一目的。但在MVC框架下,只能在HEAD元素被呈现时把样式表注入到视图中。你不能直接把样式表引用为对象。

  一、创建用户界面

  MVC程序在用户界面构建方面与以前的Web表单仍然使用类似的结构,例如,它也使用@Page指令,而且设置参数是一致的(但是,隐藏代码引用指向一个标准的ASP.NET MVC类)。它仍然使用HTML标记与服务器端代码混合模式。但是,为了使整个服务器端处理更加容易,MVC不再使用控件方式而是使用HtmlHelper类。以前是服务器端控件的功能现在变换为一个HtmlHelper类的方法。例如,为了在浏览器中呈现一个文本框元素,我们不必再使用TextBox控件,而是通过下面的代码来实现。

  上面这一句能够把一个<input type="text">元素直接呈现到响应流中。请注意这里的ToHtmlString方法调用。这是ASP.NET MVC 2中提供的一个新功能—不再是以前那样直接返回一个字符串。但是,如果你喜欢你可以省略这个方法调用,代码会像以前一样工作(即方法将被隐式调用)。

  下面展示了一个使用这些助理类的用户界面示例:

  清单1—在MVC框架下定义表单的代码示例

  上述每一个方法都返回一个描述HTML控件的字符串。使用这些方法是考虑到MVC的内置工作特征,因为MVC可以使用某些模式把这些特征连接起来。如果你喜欢的话,你当然可以直接定义这些控件的HTML代码。

  二、新的“For”后缀助理方法

  MVC 2中又提供了一组新的带有For后缀的助理方法(这实质上都是一些扩展方式,你可以通过在这些方法上单击右键并转到对应定义的方式来跟踪观察),诸如TextBoxFor,CheckBoxFor等等。这些方法通过一个lambda表达式来选择模型内的属性并最终用于显示到用户界面中。例如,Html.TextBoxFor(i=>i.FirstName)语句就会提取模型中第一个姓名的值。

  清单2—使用带有For后缀的助理方法(扩展方法)的代码示例

  归纳来看,上面的代码做了两件事情:第一是使用模型中提供的内在值呈现基本的HTML元素;第二,元素的ID和name都使用了lambda表达式中提供的文本(在这个例子中是ScenarioNumber和Description)。借助于这些方法,我们可以很方便地呈现直接对应于模型部分的内容,并且有助于控制模型绑定(稍后进行解释)。

0 0