如何管理 Visual Studio.NET 或 Visual Studio 2005 中的多語系 Web Form 解決方案

文章翻譯 文章翻譯
文章編號: 315903 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何使用的 XML 資料島與.NET XML Web 伺服器控制項建立小型、 多語系 Web 應用程式專案,顯示 「 可延伸標記語言 」 (XML) 資料。主應用程式是建置於 Visual Basic.NET 或 Visual Basic 2005 中。應用程式會使用 Visual C# 類別庫元件,說明多種程式語言參考和實作繼承。

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Windows 2000 專業版、 Microsoft Windows 2000 Server、 Microsoft Windows XP 商用版或 Microsoft Windows XP 伺服器與 Microsoft.NET Framework 和 Microsoft Visual Studio.NET] 安裝
本文假設您已熟悉下列主題:
  • 實作繼承
  • XML 和 「 可延伸樣式表語言轉換 (XSLT)
  • Microsoft.NET Web 伺服器控制項

建立多種語言的 ASP.NET Web 應用程式

在下列步驟建立一個小型 ASP.NET Web 應用程式專案,讓客戶選擇午餐功能表項目為基礎的卡路里計數。如果要執行這項操作,範例會使用 XML Web 伺服器控制項是簡單的 XML 文件,其中包含功能表的資料和來轉換 XML 資料的 XSL 樣式表。XsltArgumentList 類別從 System.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. 公用類別 1,之下加入下列程式碼:
    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 鍵以存取屬性頁。將 pageLayout 屬性變更為 FlowLayout
  8. 在 [Web] 表單上鍵入 最高卡路里:
  9. 文字方塊 控制項、 Button 控制項和 Xml 控制項加入表單,如下所示:
    1. 請按 CTRL + ALT + X 組合鍵來開啟工具箱]。
    2. 在工具箱按一下 Web Form
    3. 從工具箱] 拖曳 TextBox 控制項和一個 按鈕 控制項,並拖放到 Web 上的這些控制項表單。
    4. 按下 F4 以存取 [按鈕] 控制項的屬性頁。
    5. 將 [文字] 屬性變更至 [篩選] 功能表
    6. 將游標放在按鈕之後,然後按下 ENTER Xml 控制項將游標的位置。
    7. XML Web 伺服器控制項從工具箱拖放到 Web Form 上的此控制項。
    8. 按下 F4 以存取 [XML] 控制項的屬性頁。
    9. 將 [DocumentSource 屬性變更為 Menu.xml,並接著將 TransformSource 屬性變更為 Menu.xslt
  10. 連按兩下 [篩選] 功能表 的 Web Form 程式碼後置類別中建立 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# 元件傳回的引數清單可讓您將 文字方塊 控制項的值當做參數傳遞至樣式表。這個樣式表使用 XSLT 指令來篩選所有午餐超過卡路里的功能表項目計數,客戶型別。下行從樣式表的程式碼將說明如何接收和使用參數:
    <xsl:for-each select="lunch-menu/food[calories <= $calories]">
    					
  12. 使用來自 Menu.xmlMenu.xslt 區段的程式碼來建立 「 Menu.xml 」 和 「 Menu.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 Form 的應用程式程式碼後置類別。

目前程式碼後置類別會繼承 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. 修改 類別 1 宣告以繼承 Page 類別:
    public class Class1 : System.Web.UI.Page
    					
  6. Visual Basic.NET 或 Visual Basic 2005 程式碼後置類別目前已準備好要繼承 類別 1 的。因為 類別 1 會繼承 Page 類別,程式碼後置類別也會繼承透過其繼承 Page 類別的 類別 1

    在 [編輯器] 視窗中,按一下 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 Framework 軟體開發套件 (SDK):
    語言對等用法
    http://msdn2.microsoft.com/en-us/library/czz35az4(vs.71).aspx
  • 如果您想要使用實作繼承,研究設計的物件導向原則,並且事先考慮應用程式架構。常見的錯誤是在您需要繼承類別庫] 中的主應用程式中放置程式碼。在這種情況下您不能繼承類別庫中主要的應用程式因為循環相依性。比方說嘗試將參考加入至功能表專案 ClassLibrary1 專案中。您會收到下列錯誤訊息:
    無法新增 '功能表' 的參考。將這個專案加入做為參考,會造成循環相依性。

參考

如需詳細資訊,請參閱以下列 Microsoft 網站:
基本 Instincts:.NET 第 1 部份中使用繼承
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

基本 Instincts:.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 Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 標準版
  • Microsoft Visual Basic 2005
關鍵字:?
kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB315903 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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