2008-08-26 18 views
14

Supongamos que tiene 2 aplicaciones ASP.NET diferentes en IIS. Además, tiene algunos controles ASCX que desea compartir en estas 2 aplicaciones.¿La mejor manera de compartir controles .ascx de ASP.NET en diferentes aplicaciones de sitios web?

¿Cuál es la mejor manera de crear una "biblioteca de control de usuario", para que pueda usar la misma implementación de control en las 2 aplicaciones, sin tener que duplicar el código?

Los controles tienen ASCX con código HTML + detrás.


controles compuestos serán difíciles, porque trabajamos con diseñadores que usan la sintaxis HTML en los archivos ASCX con el estilo de los controles.

Tundey, usamos SVN aquí. ¿Tiene un ejemplo sobre cómo implementar su sugerencia? ¿Cómo puede SVN compartir los controles de ASP.NET?

Gracias!

Respuesta

5

Debería crear controles compuestos en lugar de controles .ASCX si desea poder usarlos en proyectos separados.

1

Una alternativa es utilizar la herramienta de control de origen para "compartir" los controles ASCX entre sus aplicaciones web. Esto le permitirá realizar cambios en los controles en cualquiera de las aplicaciones y hacer que el control de origen asegure que los cambios se reflejen en nuestras aplicaciones web.

0

Uso StarTeam aquí y le permite "compartir" objetos (archivos, solicitudes de cambio, requisitos, etc.) en varias carpetas. No estoy seguro de si Subversion (SVN) tiene esa característica. Si no es así, aquí hay otro truco que puede usar: crear un cruce desde la ubicación principal de los controles a una ubicación en los otros proyectos. Un cruce es como un enlace simbólico de Unix. Se puede descargar la herramienta para la creación de uniones en Windows desde here

0

El mayor problema que he notado con controles en ASP.Net es que no se puede conseguir fácilmente el apoyo de diseño para la construcción tanto el control y utilizando el control en un sitio una vez que lo construiste La única forma que he podido hacer es crear un control .ascx sin código subyacente (es decir, todo el código del lado del servidor está en una etiqueta de script en el archivo .ascx con el atributo runat = "server") .

Pero aún así, todavía tiene que copiar el archivo .ascx, por lo que si alguna vez necesita hacer un cambio significa que debe actualizar el archivo en cada ubicación donde lo haya usado. Así que sí, asegúrate de que esté en control de fuente.

1

Logré hacer esto sacrificando parte de la facilidad de construcción de los controles en primer lugar.

Puede crear un proyecto de biblioteca de control que genere una DLL de biblioteca de control para usted. El inconveniente es que debe crear los controles solo con código. En mi último proyecto, esto estuvo bien. En controles más complicados, esto puede ser un problema.

He aquí un ejemplo:

<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _ 
Public Class BreadCrumb 
    WebControl 

    <Bindable(True)> _ 
    Property Text() As String 
     '...' 
    End Property 

    Protected Overrides Sub RenderContents(output as HtmlTextWriter) 
     output.write(Text) 
    End Sub 

    Private Sub Page_Load(...) Handles MyBase.Load 
     ' Setup your breadcrumb and store the HTML output ' 
     ' in the Text property ' 
    End Sub 
End Class 

Cualquier cosa que poner en que la propiedad de texto se representará.

Luego, cualquier control que coloque aquí puede funcionar como cualquier otro control que use. Simplemente importe en su Toolbox, haga su referencia de registro, luego póngalo en la página ASP.

15

Scott Guthrie ofrece aquí un gran consejo sobre cómo configurar un proyecto de biblioteca de control de usuario, luego utiliza eventos de preconstrucción para copiar los controles de usuario en múltiples proyectos. Funciona realmente bien.

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx

+0

Miré varias de estas soluciones, y esta es de lejos la más fácil si tiene controles de usuario existentes para compartir entre sitios web. –

0

poco hice una aplicación web que acaba de hacer referencia a los archivos (unos 90 en total) de una aplicación web (aspx, amo y ascx) sin demasiado de un problema. Dicho esto, estaba usando una versión muy modificada del MVP pattern, muchas interfaces y convenciones para mantener la complejidad baja, el mismo nivel medio y un sitio era un subconjunto del otro.

grandes cuestiones:

  1. páginas maestras (y en diseñadores de giro y la vista HTML de formato) no funcionan en un archivo de referencia por lo que se pierde una gran cantidad de funcionalidad. Un paso previo a la compilación y un montón de svn: ignorar entradas fue mi hack alrededor de esto. También fue un fastidio lograr que CruiseControl.NET hiciera que la tarea de preconstrucción se ejecutara en las carpetas correctas.
  2. Las páginas/controles compartidos deben ser extremadamente conscientes de lo que tocan y de las referencias para evitar tener dependencias adicionales.
  3. Ambos sitios están bloqueados para la implementación.
  4. Ahora tengo que rezar para que el mantenedor lea mi pequeño documento sobre el desastre que hice. Está muy lejos de lo que he visto en los proyectos de ASP.NET.

Estaba bajo una gran presión de tiempo para que funcione, y ahora ambas aplicaciones están en producción. Yo no lo recomendaría, pero si estás interesado en el inicio:

Agregar elemento existente, seleccionar algunos archivos, haga clic en la flecha Agregar de botón y decir Agregar un enlace.

2

Además de lo que dijo Tundey, NTFS Enlace extensión de la cáscara es muy útil cuando se trata de compartir una gran parte del contenido (ej .: una carpeta con Ascx/.aspx) entre los proyectos de otra manera independientes. En caso de código, creo que es preferible hacer otra copia de trabajo de VCS.

0

Tengo un suggestion.WE puede utilizar el control de usuario a través de la aplicación múltiplos mediante la creación de control de usuario dentro de proyecto de sitio web como normally.Then cambiar los ensamblados de página web propiedad de uso de denominación fija e individuales . Luego podemos usar el control de usuario dll en múltiples aplicaciones.

Cuestiones relacionadas