如何管理多语言的 Web 窗体解决方案在 Visual Studio.net 或 Visual Studio 2005 中

文章翻译 文章翻译
文章编号: 315903 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

概要

本文演示如何使用 XML 数据岛和.net Xml Web 服务器控件来创建可扩展标记语言 (XML) 数据将显示一个小的、 多语言 Web 应用程序项目。在 Visual Basic.net 或 Visual Basic 2005 中生成主应用程序。应用程序使用 Visual C# 类库组件来阐释多语言引用和实现继承。

要求

下面的列表概述了建议的硬件、 软件、 网络的基础结构和服务包,您需要:
  • Microsoft Windows 2000 专业版、 Microsoft Windows 2000 Server、 Microsoft Windows XP 专业人员或与 Microsoft.net 框架和 Microsoft Visual Studio.net 中安装的 Microsoft Windows XP 服务器
本文假定您熟悉下列主题:
  • 实现继承
  • XML 和可扩展样式表语言转换 (XSLT)
  • microsoft.net web 服务器控件

创建多语言的 ASP.NET Web 应用程序

在下面的步骤中创建一个小允许客户选择午餐菜单项的 ASP.NET Web 应用程序项目根据卡路里计数。为此示例使用一个简单的 XML 文档中包含菜单数据和转换 XML 数据的 XSL 样式表在 Xml Web 服务器控件。XsltArgumentListSystem.Xml.Xsl 命名空间中的,可以在转换中使用参数。
  1. 创建 Visual Basic Windows 应用程序项目,如下所示:
    1. 启动 Microsoft Visual Studio.net 或 Microsoft 可 Visual Studio 的 2005年,然后单击 新建项目
    2. 项目类型 框中,单击 Visual Basic 项目。在 模板 框中,单击 ASP.NET Web 应用程序。重命名项目 菜单,然后单击 确定

      注意在 Visual 有关 Studio 的 2005 年单击 项目类型 下的 Visual Basic
  2. 请确保解决方案资源管理器窗口是可见。如果它不按下 CTRL + ALT + L 组合键。
  3. 您现在有了 Visual Basic.net 或 Visual Basic 2005 Web 应用程序名为菜单在解决方案中项目的外壳程序。若要使一个多语言解决方案,您必须添加一个 Visual C# 类库。

    在解决方案资源管理器窗口用鼠标右键单击 菜单,指向 添加,然后单击 新建项目。在 项目类型 框中,单击 Visual C# 项目。在 模板 框中,单击 类库。默认名称名称 ClassLibrary1 保持。单击 确定 以将此类库添加到解决方案中。

    注意在 Visual 有关 Studio 的 2005 年单击 Visual C#项目类型 下。
  4. Class1.cs 出现在编辑器窗口中。将下面的命名空间声明添加到此窗口的顶部:
    using System.Xml.Xsl;
    					
  5. 公用的 Class1,添加以下代码:
    public XsltArgumentList CreateArgumentList(
    string ParamName, string NamespaceURI, string ParamValue)
    {
     XsltArgumentList tal = new XsltArgumentList();
     tal.AddParam(ParamName, NamespaceURI, ParamValue);
     return tal;
    }
    					
  6. 您现在有一个 Visual C# 类的获取 XSLT 参数信息,并返回 XsltArgumentList 类的实例的信息。您现在可以构建将消耗此组件的 Visual Basic 应用程序。

    WebForm1.aspx 应该已经是在设计视图中打开。如果不是,双击 WebForm1.aspx 在解决方案资源管理器窗口中。单击 设计 选项卡以切换到设计视图在编辑器窗口的下方。
  7. 请按 F4 键,以访问属性页。更改为 FlowLayoutpageLayout 属性。
  8. 在 Web 窗体上键入 最大卡路里:
  9. 将添加一个 TextBox 控件、 一个 按钮 控件和一个 Xml 控件在窗体中,如下所示:
    1. 请按 CTRL + ALT + X 键组合打开工具箱。
    2. 在工具箱中单击 Web 窗体
    3. 从在工具箱中拖动 TextBox 控件和一个 按钮 控件,并放到 Web 上的这些控件窗体。
    4. 请按 F4 以访问 Button 控件属性页。
    5. 更改 筛选菜单文本 属性。
    6. 将光标放在按钮后,然后按 ENTER 以 Xml 控件为光标的位置。
    7. 从在工具箱中拖动一个 Xml Web 服务器控件放到 Web 窗体上的该控件。
    8. 请按 F4 以访问的 Xml 控件属性页。
    9. DocumentSource 属性更改为 Menu.xml,然后改 Menu.xsltTransformSource 属性。
  10. 双击要在代码隐藏类的 Web 窗体中创建一个 Click 事件处理程序的 筛选器菜单。将代码添加到处理程序之前,必须将添加在 Visual C# 类库的引用,如下所示:
    1. ClassLibrary1,解决方案资源管理器窗口中右击 引用,然后单击 添加引用
    2. 项目 选项卡上双击 $ ClassLibrary1。请注意 ClassLibrary1 会出现在 选定的组件 列表框中。
    3. 单击 确定。请注意 ClassLibrary1 会出现在 Web 应用程序中的 引用
  11. 将下面的代码添加到 Click 事件处理程序:
    Dim myArgList As New ClassLibrary1.Class1()
    Xml1.TransformArgumentList = myArgList.CreateArgumentList("calories", "", TextBox1.Text)
    Xml1.Visible = True
    						
    Visual C# 组件返回的参数列表,可以将 TextBox 控件的值作为参数传递到样式表。此样式表使用 XSLT 命令筛选所有午餐,超过该卡路里的菜单项计数的客户类型。下面的样式表中的代码行显示了接收到和使用该参数的方式:
    <xsl:for-each select="lunch-menu/food[calories <= $calories]">
    					
  12. 若要创建将 Menu.xml 和 Menu.xslt 文件使用从 Menu.xmlMenu.xslt 节的代码。在解决方案资源管理器窗口中右击菜单项目,然后添加.xml 和.xslt 文件。

完成代码列表

Menu.xml

<?xml version='1.0'?>
<lunch-menu>
  <food>
    <name>Cheese Pizza</name>
    <price>$6.95</price>
    <description>Individual deep-dish pizza with lots of mozzarella cheese</description>
    <calories>800</calories>
  </food>
  <food>
    <name>Pepperoni Pizza</name>
    <price>$7.95</price>
    <description>Individual deep-dish cheese pizza with thick-cut pepperoni slices</description>
    <calories>950</calories>
  </food>
  <food>
    <name>The "Everything" Pizza</name>
    <price>$9.95</price>
    <description>Individual deep-dish pizza with all our toppings. House specialty!</description>
    <calories>800</calories>  </food>
  <food>
    <name>Hungarian Ghoulash</name>
    <price>$4.50</price>
    <description>Large serving in a sourdough bread bowl. A_local delight!</description>
    <calories>600</calories>
  </food>
  <food>
    <name>Maisey's Pork Sandwich</name>
    <price>$6.95</price>
    <description>A fresh pork fillet, deep-fried to perfection. Served with fries.</description>
    <calories>950</calories>
  </food>
</lunch-menu>
				

Menu.xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="calories">1500</xsl:param>
  <xsl:template match="/">
    <HTML>
      <BODY STYLE="font-family:Arial, helvetica, sans-serif; font-size:12pt;
            background-color:#EEEEEE">
        <xsl:for-each select="lunch-menu/food[calories <= $calories]">
          <DIV STYLE="background-color:blue; color:white; padding:4px">
            <SPAN STYLE="font-weight:bold; color:white"><xsl:value-of select="name"/></SPAN>
            - <xsl:value-of select="price"/>
          </DIV>
          <DIV STYLE="margin-left:20px; margin-bottom:1em; font-size:10pt">
            <xsl:value-of select="description"/>
            <SPAN STYLE="font-style:italic">
              (<xsl:value-of select="calories"/> calories per serving)
            </SPAN>
          </DIV>
        </xsl:for-each>
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>
				

WebForm1.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="menu.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body >

    <form id="Form1" method="post" runat="server">
<P>Maximum Calories: 
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" Text="Filter menu"></asp:Button></P>
<P>
<asp:Xml id="Xml1" runat="server" DocumentSource="menu.xml" TransformSource="menu.xslt"></asp:Xml></P>

    </form>

  </body>
</HTML>
				

Class1.cs 非继承示例

using System;
using System.Xml.Xsl;

namespace ClassLibrary1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1
    {
        public XsltArgumentList CreateArgumentList(
        string ParamName, string NamespaceURI, string ParamValue)
        {
            XsltArgumentList tal = new XsltArgumentList();
            tal.AddParam(ParamName, NamespaceURI, ParamValue);
            return tal;
        }
    }
}
				

WebForm1.vb 继承 System.Web.UI.Page

Imports System.Xml.Xsl

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Xml1 As System.Web.UI.WebControls.Xml

#Region " Web Form Designer Generated Code "

    'The Web Form Designer requires this call.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: The Web Form Designer requires this method call.
        'Do not use the Code editor to modify it.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
        'Insert user code to initialize the page here.
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim tal As New XsltArgumentList()
        tal.AddParam("calories", "", TextBox1.Text)
        Xml1.TransformArgumentList = tal
        Xml1.Visible = True
    End Sub
End Class
				

Class1.cs 继承示例

using System;
using System.Xml.Xsl;

namespace ClassLibrary1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1 : System.Web.UI.Page
    {
        public XsltArgumentList CreateArgumentList(
        string ParamName, string NamespaceURI, string ParamValue)
        {
            XsltArgumentList tal = new XsltArgumentList();
            tal.AddParam(ParamName, NamespaceURI, ParamValue);
            return tal;
        }
    }
}
				

WebForm1.vb 继承 ClassLibrary1

Imports System.Xml.Xsl

Public Class WebForm1
    Inherits ClassLibrary1.Class1
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Xml1 As System.Web.UI.WebControls.Xml

#Region " Web Form Designer Generated Code "

    'The Web Form Designer requires this call.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: The Web Form Designer requires this method call.
        'Do not use the Code editor to modify it.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
        'Insert user code to initialize the page here.
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
        Xml1.Visible = True
    End Sub
End Class
				

验证它工作的

  1. 按 F5 键以在调试模式下运行该应用程序。
  2. 默认情况下,将显示整个菜单。请注意卡路里计数每个项目。
  3. 在文本框中键入一个数字的卡路里,然后单击 筛选菜单。请注意只有这些菜单项小于或等于此卡路里量的显示。
  4. 请按 SHIFT + F5 键组合,以停止调试并返回到 Visual Studio。

为了演示多语言继承的步骤

为了说明多语言继承,您必须修改 Web 应用程序项目。而不是创建类库的实例的组件,从 Visual Basic.net Web 窗体继承的应用程序代码隐藏类。

当前,该代码隐藏类继承 System.Web.UI.Page 类。因为 Microsoft.net 不支持多重继承,您必须将 类继承移动到 Visual C# 类。
  1. 在该类库添加 System.Web 命名空间的引用之前您修改 Visual C#, 代码。
  2. ClassLibrary1,解决方案资源管理器窗口中右击 引用,然后单击 添加引用
  3. .net 选项卡上双击 System.Web.dll。请注意 System.Web.dll 会出现在 选定的组件 列表框中。
  4. 单击 确定。请注意 System.Web 会出现在您的类库的 引用 下。
  5. 修改继承 Page 类的 Class1 声明:
    public class Class1 : System.Web.UI.Page
    					
  6. 现在已准备好继承 Class1 Visual Basic.net 或 Visual Basic 2005 代码隐藏类。因为 Class1 继承 Page 类,代码隐藏类还继承了 Page 类通过其继承的 Class1

    在编辑器窗口中单击 $ WebForm1.aspx.vb。在类声明替换 ClassLibrary1.ClassSystem.Web.UI.Page。更新后的代码应如下所示:
    Inherits ClassLibrary1.Class1
    					
  7. 注释掉 Click 事件处理程序中第一个行,如下所示:
    'Dim myArgList As New ClassLibrary1.Class1()
    					
  8. 通过在不使用对象引用的情况下调用 CreateArgumentList 修改 Click 事件处理程序在第二行:
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
    					
  9. 重复 Verify That It Works 部分中的步骤。

故障排除

  • 使用这两种语言时, 很容易混淆的语法。visual C# 语法不允许错误宽的边距。此外,Visual C#.net 错误消息并不总是作为提示或 $ 直观 Visual Basic.net 错误消息。若要对这些问题的疑难解答,请参阅"语言等效"部分中的该 Microsoft.net 框架软件开发工具包 (SDK):
    等效语言
    http://msdn2.microsoft.com/en-us/library/czz35az4(vs.71).aspx
  • 如果您希望使用实现继承,学习面向对象设计原则的并预先考虑应用程序体系结构。一个常见错误是将代码放在主应用程序中需要在某个类库中继承的。在这种情况下您不能由于循环依赖项的继承是一个类库中的主应用程序。例如对于尝试 ClassLibrary1 项目中添加菜单项目的引用。您会收到以下错误消息:
    无法添加对 '' 的引用。将此项目添加为引用将导致循环依赖项。

引用

有关详细的信息,请参阅以下 Microsoft 网站来:
基本技术: 使用.net,第 1 部分中的继承
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

基本技术: 使用.net,第 2 部分) 中的继承
http://msdn.microsoft.com/en-us/magazine/cc301744.aspx

XML 核心
http://msdn.microsoft.com/en-us/xml/bb291077.aspx

Xml Web 服务器控件
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gnconxmlwebservercontrol.asp

XML 数据岛
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/comsrv2k/htm/cs_tp_bizdesk_nqok.asp

属性

文章编号: 315903 - 最后修改: 2014年2月24日 - 修订: 5.8
这篇文章中的信息适用于:
  • Microsoft Visual .NET 2002 标准版
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual C# .NET 2003 标准版
  • Microsoft Visual Basic 2005
关键字:?
kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB315903 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 315903
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com