Как управлять многоязычных решений Web Forms в Visual Studio .NET или Visual Studio 2005

Переводы статьи Переводы статьи
Код статьи: 315903 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье показано, как использовать острова данных XML и .NETXMLВеб-элемента управления сервера, чтобы создать небольшой, многоязыковой поддержки веб-проект приложения для отображения XML-данных. Основное приложение создается в Visual Basic .NET или Visual Basic 2005. Приложение использует компонент библиотеки классов Visual C# для демонстрации многоязыковой ссылки и наследование реализации.

Требования

В приведенном ниже списке перечислены требования к оборудованию, сети, программному обеспечению и пакетам обновления.:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional или Windows XP Server с помощью платформы Microsoft .NET Framework и Microsoft Visual Studio .NET установлен
При написании статьи предполагалось, что пользователь обладает достаточными знаниями в указанных ниже областях.:
  • Наследование реализации
  • XML и расширяемый язык таблиц стилей преобразования (XSLT)
  • Сервер веб-элементы управления Microsoft .NET

Создание поддержка ASP.NET веб-приложений

В следующих шагах создания небольшой проект веб-приложения ASP.NET, который позволяет клиенту для выделения пунктов меню обедов в зависимости от количества калория. Для этого в примере используетсяXMLВеб сервер управления простой XML-документ, содержащий данные меню и таблицы стилей XSL для преобразования данных XML. надписьюXsltArgumentListкласс изSystem.Xml.Xslпространства имен позволяет использовать параметры преобразования.
  1. Создайте проект приложения Windows Visual Basic следующим образом:
    1. Запустите Microsoft Visual Studio .NET или Microsoft Visual Studio 2005 и нажмите кнопкуСоздание проекта.
    2. Из спискаТипы проектовзатем –Проекты Visual Basic. Из спискаШаблоны:затем –Веб-приложение ASP.NET. Переименовать проектменюи выберите командуOk..

      Примечание.В Visual Studio 2005 щелкнитеVisual BasicИз спискаТипы проектов.
  2. Убедитесь, что отображается окно обозревателя решений. Если это не так, нажмите сочетание клавиш CTRL + ALT + L.
  3. Теперь у вас есть оболочки проекта Visual Basic .NET или Visual Basic 2005 веб-приложения в решение с именем меню. Чтобы сделать многоязычных решений, необходимо добавить Visual библиотеки классов C#.

    В решении окно обозревателя, щелкните правой кнопкой мышименю, выберите пунктДобавьте сервери выберите командуСоздание проекта. Из спискаТипы проектовзатем –Проекты Visual C#. Из спискаШаблоны:затем –Библиотека классов. Оставьте имя по умолчанию, ClassLibrary1. затем –Ok.для добавления этой библиотеки классов в решение.

    Примечание.В 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, чтобы открыть страницу свойств. ИзменениеpageLayoutСвойствоFlowLayout.
  8. На веб-формы введитеМаксимальная калорий:.
  9. ДобавитьTextboxэлемент управления,Кнопкаэлемент управления иXMLуправления в форму следующим образом:
    1. Нажмите сочетание клавиш CTRL + ALT + X для открытия панели инструментов.
    2. На панели элементов нажмите кнопкуВеб-формы.
    3. ПеретаскиваниеTextboxэлемент управления иКнопкаиз панели управления и удалить эти элементы управления на веб-узла формы.
    4. Нажмите клавишу F4, чтобы открыть страницу свойств дляКнопкаУправление:.
    5. ИзменениеTextСвойствоМеню фильтра.
    6. Position the cursor after the button, and then press ENTER to position the cursor for theXMLУправление:.
    7. Drag anXMLWeb server control from the toolbox, and drop this control onto the Web Form.
    8. Press F4 to access the property page of theXMLУправление:.
    9. ИзменениеDocumentSourceСвойствоMenu.xml, а затем изменитеTransformSourceСвойствоMenu.xslt.
  10. Двойной щелчокFilter Menuto create aзатем –event handler in the code-behind class of the Web Form. Before you add code to the handler, you must add a reference to the Visual C# Class Library as follows:
    1. In the Solution Explorer window, underClassLibrary1, щелкните правой кнопкой мышиСсылкии выберите командуДобавление ссылки.
    2. в менюПроектывкладки, дважды щелкните значокClassLibrary1. Обратите внимание, чтоClassLibrary1appears in theSelected ComponentsList Box.
    3. затем –Ok.. Обратите внимание, чтоClassLibrary1appears underСсылкиin the Web Application.
  11. Добавьте следующий код взатем –обработчик событий:
    Dim myArgList As New ClassLibrary1.Class1()
    Xml1.TransformArgumentList = myArgList.CreateArgumentList("calories", "", TextBox1.Text)
    Xml1.Visible = True
    						
    The argument list that the Visual C# component returns allows you to pass the value of theTextboxcontrol as a parameter to the stylesheet. This stylesheet uses XSLT commands to filter out all lunch menu items that exceed the calorie count that the customer types. The following line of code from the stylesheet illustrates how the parameter is received and used:
    <xsl:for-each select="lunch-menu/food[calories <= $calories]">
    					
  12. Use the code from theMenu.xmlиMenu.xsltsections to create the Menu.xml and Menu.xslt files. In the Solution Explorer window, right-click the Menu project, and then add the .xml and .xslt files.

Полный листинг кода

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 Non-Inheritance Example

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 Inheriting 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 Inheritance Example

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 Inheriting 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
				

Verify That It Works

  1. Press the F5 key to run the application in debug mode.
  2. The entire menu appears by default. Take note of the calorie counts for each item.
  3. In the text box, type a number of calories, and then clickFilter Menu. Notice that only those menu items that are less than or equal to this calorie amount appear.
  4. Press the SHIFT+F5 key combination to stop debugging and to return to Visual Studio.

Steps to Demonstrate Multilanguage Inheritance

To illustrate multilanguage inheritance, you must modify the Web Application project. Instead of creating an instance of the Class Library component, the application inherits from the Visual Basic .NET Web Form code-behind class.

The code-behind class currently inherits theSystem.Web.UI.PageКласс:. Because Microsoft .NET does not support multiple inheritance, you must moveСтраницаclass inheritance to the Visual C# class.
  1. Добавьте ссылку наSystem.Webпространство имен в библиотеке классов, перед внесением изменений в Visual C# кода.
  2. В окне обозревателя решений в областиClassLibrary1, щелкните правой кнопкой мышиСсылкии выберите командуДобавление ссылки.
  3. в меню.netвкладки, дважды щелкните значокSystem.Web.dll. Обратите внимание, чтоSystem.Web.dllпоявится вВыбранные компоненты.List Box.
  4. затем –Ok.. Обратите внимание, чтоSystem.Webбудет отображена в разделеСсылкив библиотеке классов.
  5. ИзменитьClass1объявления для наследованияСтраницаКласс::
    public class Class1 : System.Web.UI.Page
    					
  6. Класс выделенного кода Visual Basic .NET или Visual Basic 2005 теперь готов для наследованияClass1. Так какClass1наследуетСтраницакласс, класс выделенного кода также наследуетСтраницакласс с помощью его наследования изClass1.

    В окне редактора щелкнитеWebForm1.aspx.vb. В разделе объявлений класса заменитеSystem.Web.UI.Pageэтим кодом:ClassLibrary1.Class. Обновленный код должен выглядеть следующим образом:
    Inherits ClassLibrary1.Class1
    					
  7. Комментарий из первой строкизатем –обработчик событий, как показано ниже:
    'Dim myArgList As New ClassLibrary1.Class1()
    					
  8. Измените вторую строку взатем –обработчик события путем вызова методаCreateArgumentListбез ссылки на объект.
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
    					
  9. Повторите этапыУбедитесь, что действияв разделе.

ПОИСК И УСТРАНЕНИЕ НЕПОЛАДОК

  • При работе с двумя языками, очень просто перепутать синтаксиса. Синтаксис Visual C# не допускает ширину поля ошибки. Кроме того сообщения об ошибках Visual C# .NET не всегда такой интуитивно понятной как сообщения об ошибках Visual Basic .NET или строке. Чтобы устранить эти трудности, обратитесь к разделу «Эквиваленты языка» из Microsoft .NET Framework программного обеспечения Development Kit (SDK):
    Языковые эквиваленты
    .aspx HTTP://msdn2.Microsoft.com/en-us/library/czz35az4 (vs.71)
  • Если необходимо использовать наследование реализации, изучить принципы объектно ориентированного проектирования и заранее рассмотрим архитектуру приложения. A common mistake is to put code in a main application that you need to inherit in a Class Library. In this scenario, you cannot inherit the main application in a Class Library because of circular dependencies. For example, try to add a reference to the Menu project in the ClassLibrary1 project. You receive the following error message:
    A reference to 'Menu' could not be added. Adding this project as a reference would cause a circular dependency.

Ссылки

For more information, refer to the following Microsoft Web sites:
Basic Instincts: Using Inheritance in .NET, Part 1
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

Basic Instincts: Using Inheritance in .NET, Part 2
http://msdn.microsoft.com/en-us/magazine/cc301744.aspx

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

Xml Web Server Control
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gnconxmlwebservercontrol.asp

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

Свойства

Код статьи: 315903 - Последний отзыв: 21 февраля 2014 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • 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 Standard Edition
  • Microsoft Visual Basic 2005
Ключевые слова: 
kbnosurvey kbarchive kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB315903 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:315903

Отправить отзыв

 

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