Cómo administrar multilenguaje soluciones de formularios Web Forms en Visual Studio .NET o Visual Studio 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 315903 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo utilizar una isla de datos XML y el control de servidor Web de XML de .NET para crear un proyecto de aplicación Web pequeño, multilenguaje que muestra datos de lenguaje de marcado extensible (XML). La aplicación principal se genera en Visual Basic .NET o Visual Basic 2005. La aplicación utiliza un componente de biblioteca de clases de Visual C# para ilustrar las referencias de multilenguaje y herencia de implementación.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional o Microsoft Windows XP Server con Microsoft .NET Framework y Microsoft Visual Studio .NET instalado
En este artículo se supone que está familiarizado con los temas siguientes:
  • Herencia de implementación
  • XML y Extensible Stylesheet Language Transformation (XSLT)
  • Controles de servidor web de Microsoft .NET

Crear una aplicación Web ASP.NET multilingüe

En los pasos siguientes, se crea un pequeño proyecto de aplicación Web ASP.NET que permita a un cliente seleccionar elementos de menú de comida en función de recuento de calorías. Para ello, el ejemplo utiliza el control de servidor Web XML , un documento XML simple que contiene los datos de menú y una hoja de estilos XSL para transformar los datos XML. La clase XsltArgumentList del espacio de nombres System.Xml.xsl le permite utilizar parámetros en la transformación.
  1. Cree un proyecto de aplicación para Windows de Visual Basic como sigue:
    1. Inicie Visual Studio.NET o Microsoft Visual Studio 2005 y, a continuación, haga clic en Nuevo proyecto .
    2. En Tipos de proyecto , haga clic en Proyectos de Visual Basic . En plantillas , haga clic en Aplicación Web ASP.NET . Cambie el nombre del menú proyecto y, a continuación, haga clic en Aceptar .

      Nota En Visual Studio 2005, haga clic en Visual Basic bajo Tipos de proyecto .
  2. Asegúrese de que la ventana Explorador de soluciones está visible. Si no lo está, presione la combinación de teclas CTRL + ALT + L.
  3. Ahora tiene el shell de un proyecto Visual Basic .NET o aplicación Web de Visual Basic 2005 de una solución denominada menú. Para hacerlo de una solución de varios idiomas, debe agregar una biblioteca de clases C# Visual.

    En la solución de ventana del explorador, haga clic con el botón secundario del mouse en menú , elija Agregar y, a continuación, haga clic en Nuevo proyecto . En Tipos de proyecto , haga clic en Proyectos de Visual C# . En plantillas , haga clic en Biblioteca de clases . Mantenga el nombre predeterminado, ClassLibrary1. Haga clic en Aceptar para agregar esta biblioteca de clase a la solución.

    Nota Haga clic en Visual Studio 2005, en C# en Tipos de proyecto.
  4. Class1.cs aparece en la ventana de editor. Agregue la siguiente declaración de espacio de nombres a la parte superior de esta ventana:
    using System.Xml.Xsl;
    					
  5. En Class1 pública , agregue el siguiente código:
    public XsltArgumentList CreateArgumentList(
    string ParamName, string NamespaceURI, string ParamValue)
    {
     XsltArgumentList tal = new XsltArgumentList();
     tal.AddParam(ParamName, NamespaceURI, ParamValue);
     return tal;
    }
    					
  6. Ahora tiene una clase de C# toma la información de parámetros XSLT y devuelve una instancia de la clase XsltArgumentList . Ahora puede crear la aplicación de Visual Basic que utilizará este componente.

    WebForm1.aspx ya debería estar abierto en la vista Diseño. Si no es así, haga doble clic en WebForm1.aspx en la ventana Explorador de soluciones. Haga clic en la ficha Diseño debajo de la ventana de editor para cambiar a la vista Diseño.
  7. Presione la tecla F4 para obtener acceso a la página de propiedades. Cambie la propiedad pageLayout en FlowLayout .
  8. En el formulario Web, escriba calorías máximo: .
  9. Agregar un control TextBox , un control Button y un control XML en el formulario como sigue:
    1. Presione la combinación de teclas CTRL + ALT + X para abrir el cuadro de herramientas.
    2. En el cuadro de herramientas, haga clic en Formularios Web Forms .
    3. Arrastre un control TextBox y un control Button desde el cuadro de herramientas y coloque estos controles en el Web Form.
    4. Presione F4 para obtener acceso a la página de propiedades para el control Button .
    5. Cambie la propiedad Text al Menú de filtro .
    6. Coloque el cursor detrás del botón y, a continuación, presione ENTRAR para colocar el cursor para el control XML .
    7. Arrastre un control de servidor Web XML desde el cuadro de herramientas y coloque este control en el Web Form.
    8. Presione F4 para obtener acceso a la página de propiedades del control XML .
    9. Cambie la propiedad DocumentSource a Menu.xml y, a continuación, cambie la propiedad TransformSource a Menu.xslt .
  10. Haga doble clic en El menú de filtro para crear un controlador de evento Click en la clase de código subyacente del formulario Web. Antes de agregar código al controlador, deberá agregar una referencia a la biblioteca de Visual C# Class como sigue:
    1. En la ventana Explorador de soluciones, bajo ClassLibrary1 , haga clic con el botón secundario en referencias y, a continuación, haga clic en Agregar referencia .
    2. En la ficha proyectos , haga doble clic en ClassLibrary1 . Observe que ClassLibrary1 aparece en el cuadro de lista de Componentes seleccionados .
    3. Haga clic en Aceptar . Observe que ClassLibrary1 aparece bajo referencias en la aplicación Web.
  11. Agregue el código siguiente al controlador de evento Click :
    Dim myArgList As New ClassLibrary1.Class1()
    Xml1.TransformArgumentList = myArgList.CreateArgumentList("calories", "", TextBox1.Text)
    Xml1.Visible = True
    						
    la lista de argumento que devuelve el componente C# le permite pasar el valor del control TextBox como un parámetro a la hoja de estilos. Esta hoja de estilos utiliza comandos XSLT para filtrar comida todos los elementos de menú que exceden el calorías que contar los tipos de cliente. La siguiente línea de código de la hoja de estilos muestra cómo se recibido y se utiliza el parámetro:
    <xsl:for-each select="lunch-menu/food[calories <= $calories]">
    					
  12. Utilice el código de la Menu.xml y las secciones Menu.xslt para crear los archivos Menu.xml y Menu.xslt. En la ventana Explorador de soluciones, haga clic con el botón secundario en el menú proyecto y, a continuación, agregue los archivos .XML y .XSLT.

Lista de código completa

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>
				

Ejemplo de herencia no 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 heredar 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
				

Ejemplo de herencia de 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 heredar 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
				

Comprobar que funciona

  1. Presione la tecla F5 para ejecutar la aplicación en modo de depuración.
  2. El menú completo aparece de forma predeterminada. Tome nota de los recuentos de calorías para cada elemento.
  3. En el cuadro de texto, escriba un número de calorías y, a continuación, haga clic en Filtro menú . Observe que aparecen sólo los elementos de menú que están menor o igual a este importe calorías.
  4. Presione la combinación de teclas MAYÚS + F5 para detener la depuración y volver a Visual Studio.

Pasos para ilustrar la herencia multilingüe

Para ilustrar la herencia multilenguaje, debe modificar el Web proyecto de aplicación. En lugar de crear una instancia de la biblioteca hereda de la aplicación de componente, de Web Forms de Visual Basic .NET clase de código subyacente.

La clase de código subyacente actualmente hereda la clase System.Web.UI.Page . Porque Microsoft .NET no admite herencia múltiple, debe mover la herencia de clase de página a la clase de C#.
  1. Agregar una referencia al espacio de nombres System.Web en la biblioteca de clases antes de modificar Visual C# código.
  2. En la ventana Explorador de soluciones, bajo ClassLibrary1 , haga clic con el botón secundario en referencias y, a continuación, haga clic en Agregar referencia .
  3. En la ficha .NET , haga doble clic en System.Web.dll . Observe que System.Web.dll aparece en el cuadro de lista de Componentes seleccionados .
  4. Haga clic en Aceptar . Observe que System.Web aparece bajo referencias en la biblioteca de clases.
  5. Modifique la declaración de Class1 para heredar la clase Page :
    public class Class1 : System.Web.UI.Page
    					
  6. La clase de código subyacente de Visual Basic .NET o Visual Basic 2005 ahora está preparada para heredar de Class1 . Dado que Class1 hereda la clase Page , la clase de código subyacente también hereda la clase de página a través de su herencia de Class1 .

    En la ventana del Editor, haga clic en WebForm1.aspx.vb . En la declaración de clase, reemplazar System.Web.UI.Page ClassLibrary1.Class . El código actualizado debe aparecer como sigue:
    Inherits ClassLibrary1.Class1
    					
  7. Ponga la primera línea en el controlador de eventos Click comentario siguiente:
    'Dim myArgList As New ClassLibrary1.Class1()
    					
  8. Modificar la segunda línea en el controlador de eventos Click llamando a CreateArgumentList sin una referencia de objeto:
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
    					
  9. Repita los pasos en la sección de Verify That It Works.

Solución de problemas

  • Cuando trabaja con dos idiomas, es fácil confundir la sintaxis. Sintaxis de Visual C# no permite un amplio margen de error. Además, los mensajes de error de Visual C# .NET no son siempre como el símbolo del sistema o tan intuitivo como mensajes de error de Visual Basic.NET. Para solucionar estos problemas, consulte la sección "Equivalentes del lenguaje" del Kit de desarrollo de software (SDK) de Microsoft .NET Framework:
    Equivalentes del lenguaje
    http://msdn2.microsoft.com/en-us/library/czz35az4(vs.71).aspx
  • Si desea utilizar la herencia de implementación, estudiar orientado a objetos principios de diseño y considerar la arquitectura de aplicación de antemano. Un error habitual es poner código en una aplicación principal que se debe heredar de una biblioteca de clases. En este escenario, no puede heredar la aplicación principal en una biblioteca de clases debido a las dependencias circulares de. Por ejemplo, intente agregar una referencia al menú proyecto en el proyecto ClassLibrary1. Recibirá el siguiente mensaje de error:
    No se pudo agregar una referencia a 'Menú'. Agregar este proyecto como una referencia provocaría una dependencia circular.

REFERENCIAS

Para obtener más información, consulte los sitios Web de Microsoft siguientes:
Instintos básicos: Utilizando la herencia en .NET, parte 1
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

Instintos básicos: Utilizando la herencia en .NET, parte 2
http://msdn.microsoft.com/en-us/magazine/cc301744.aspx

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

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

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

Propiedades

Id. de artículo: 315903 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 5.8
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB315903 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 315903

Enviar comentarios

 

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