ASP.NET MVC应用程序的本地化、单元测试

来源:转载

      很多使用 ASP.NET 传统 WebForm 表单技术的 web 开发者,对微软新的开源 ASP.NET 扩展很感兴趣,这个新的扩展称为 ASP.NET MVC。对于软件设计,将用户界面(视图)、运行逻辑(控制器)和数据(模型)分割开来的理念具有很多优点。

       其一,这种分割,虽然比通常情况要求投入稍多的工作,但有助于保持应用程序的可维护性。另一个优点是它能够更好地对你的代码进行单元测试。framework 框架(以及它的 Visual Studio 内置包)可帮助你创建单元测试结构,例如,以从控制器的方式创建;而你的任务就是编写实际的测试代码。ASP.NET MVC 1.0 刚刚推出才三个月,因此要在行业内获得较好的应用还需要时间。不过,无论你使用传统的 WebForm 表单技术还是 ASP.NET MVC,某些要求仍将是不变的:你需要对用户界面进行测试、本地化以及进行细节调整。在本文中,我们将学习使用不同的方式对 ASP.NET MVC 应用程序进行单元测试,如何对多种语言进行本地化,以及在最后,学习如何在用户界面中添加 AJAX 触控,其中的用户界面使用 MVC 项目中的视图实现。

从本地化开始

对于网页应用程序,创建多种语言的用户界面并不是什么新问题。事实上,ASP.NET 从最早的版本开始就内置了对本地化的支持。例如,你可能使用用户局部或全局资源,并在控制和/或 .aspx 文件中使用 %$ % 构造进行相关的引用。ASP.NET MVC 应用程序中的视图通常是常规的 .aspx 文件,因此你可以使用与 MVC 应用程序中完全相同的方法(参见图 1)。

498)this.style.width=498;" border=0>

图 1. ASP.NET MVC 应用程序的缺省外观和布局。

除了这种传统的本地化方法,你还可以将这种逻辑添加到控制器类中。由于使用 %$ % 是一种有点枯燥的方法,你可以使用该构造,根据当前所用的语言,从控制器返回不同的视图。这是非常有用的,尤其,当不同语言版本的视图不必保持一致时。例如,视图的英文版比法语版具有更好的扩张性。

下面,我们看看实际操作中的这两种选择。假设你开始创建了一个简单的 ASP.NET MVC 应用程序,尚未进行任何定制。Visual Studio 缺省创建的应用程序结构包含 Home 和 Account 控制器。例如,如果需要对 Home/About 文本进行本地化,你可以按照以下方式进行操作。

首先,你可以使用传统的本地化方法:使用资源。例如,要使用全局资源,你需要将 App_GlobalResources 文件夹添加到你的解决方案中。在 Visual Studio 的解决方案管理器(Solution Explorer)中右键点击项目节点,选择 Add/Add ASP.NET Folder/App_GlobalResources 。这样就可以创建所需的文件夹。

下一步是添加资源文件。在解决方案管理器,右键点击新创建的文件夹,在弹出菜单中选择 Add/New Item。这将打开 Add New Item 对话框,从中选择资源文件(Resources File )图标。为资源文件命名之后,单击 OK,Visual Studio 将会将它添加到你的项目中。然后,你可以在显示的表格中键入资源字符串(图 2)。使用资源时,对于在应用程序中进行本地化的每个字符串,你需要指定一个标识符。

498)this.style.width=498;" border=0> 

图 2. 在 ASP.NET MVC 应用程序中使用资源字符串进行本地化。


在开始对应用程序进行本地户之前,指定容易识别的字符串是一个好习惯,因为在试图页面中引用字符串时,你需要这些标识符。另外需记住,许多字符串对于每个页面都是唯一的,因此可能存在多个字符串,你可以在多个视图中使用它们,有时需要标识符名称能够反应这种情况。引用本地化的字符串很简单:你可以使用 ASP.NET 2.0 中引入的 %$ Resources %构造。例如,在 MyResources.resx 资源文件中有一个名为 HelloWorldText 的字符串,下面这段 .aspx 文件中代码,可以根据用户的首选语言,正确地转换为本地化字符串:

 asp:Literal ID="Literal1" runat="server"
Text="%$ Resources: MyResources, HelloWorldText %" /

关于 ASP.NET MVC 查找正确的本地化版本,framework 框架使用专业的文件命名规则。MyResources.resx 资源文件包含相关语言的字符串,该语言被认为是该应用程序的初始语言。如果用户的浏览器未指定语言,或者你没有在代码中指定一个语种,那么将使用初始语言字符串。不过,如果用户选择的语言为德语 那么该语言的首字母所写“de”将添加到资源文件名称后:MyResources.de.resx。其他语言也一样,例如 MyResources.es.resx  文件中包含西班牙语字符串。对于本地化,你可以还想要在 .aspx 文件的 @Page 标签中添加专用指令。比如,想要自动检测用户浏览器语言设置,你可以在该标签(指定缺省语言的冒号之后)中添加 UICulture="auto" 属性: 

%@ Page ... UICulture="auto:en-US" %

对简单视图进行本地化的另外一种选择是根据用户的语言返回不同的视图。需要在控制器中包含一些逻辑算法,不过代码很容易编写。例如,你可以使用以下的逻辑:

public ActionResult Localized()
{
if (Request.UserLanguages.Length 0)
{
string lang = Request.UserLanguages[0];
if (lang.ToUpper().StartsWith("DE"))
{
return View("Localized-DE");
}
else return View("Localized-EN");
}
else return View("Localized-EN");
}

你也可以将这些代码封装在(应用)方法中。如果需要结合使用这两种方式,那好消息是:你可以自由地进行组合和匹配。情况正是如此,ASP.NET MVC 应用程序的本地化不应受到目前可用技术的限制。

MVC 应用程序的单元测试

ASP.NET MVC 应用程序的优点之一是能够更好地对你的代码进行单元测试。

[1] [2] [3] [4] 下一页

分享给朋友:
您可能感兴趣的文章:
随机阅读: