Tengo una página maestra compartida que estoy usando desde 2 áreas diferentes en mi aplicación mvc 2. La página maestra tiene un enlace de acción que actualmente especifica el controlador y la acción, pero, por supuesto, el enlace no funciona si estoy en el área incorrecta. No veo una sobrecarga para actionlink que tome un parámetro de área, ¿es posible hacerlo?
156
Algo con lo que me encontré justo después de esto, que imagino que otros podrían encontrar: si necesita vincular desde un área a una acción que no esté en un área, aún necesita especificar el Área como una cadena vacía.
Por ejemplo, moví un código MVC a un área y descubrí que necesitaba actualizar las URL en la página maestra que hacía referencia a otras páginas del sitio.
Para especificar una URL para algo que no está en un área, use
fuente
Utilizar:
Nota : el cuarto parámetro es pasar la ruta
Values
, si pasa un parámetro vacío, considerará la estructura raíz y si pasa el valor apropiado, úselo como área.Además, no olvide usar
null
onew{}
como el quinto parámetro porque pasarnull
onew {}
al crear un enlace de acción no sobrecargará el método(text,action,controller,route data)
o(text,action,controller,route data,html attribute)
usará el método adecuadofuente
En MVC2 dar
area="root"
funcionó para mí como a continuaciónfuente
Un buen truco que puede hacer si está usando mucho un área en una Vista es definirlo como una variable en la parte superior:
fuente
Esto es lo que se me ocurrió como una solución para permitir que un usuario se vincule a los sistemas de autenticación preconstruidos.
Cada una de mis áreas tiene una versión del archivo _LoginPartial.cshtml.
Probablemente podría hacer que la aplicación use una única versión del archivo, sin embargo, seguí encontrando errores al intentar usar un solo inicio de sesión parcial.
Es solo una ligera modificación al inicio de sesión original generado, pero parece funcionar bien cuando se usa en áreas específicas.
Aquí está el código que se usa en todos ellos:
fuente
htmlAttributes:
funcionó muy bien para usar múltiples parámetros.Si no puede usar el enlace de aplicación web estándar como Acerca de, Inicio, Contac, etc. del área. Cambias lineas
de
Views \ Shared_Layout.cshtml
fuente
En mi aplicación ASP Net Core, simplemente agrego el área a los atributos html de esta manera:
fuente
Utilizando
Logrará lo que busca.
¡DisplayText es lo que se mostrará (lo mismo que
<a href="#">DisplayText</a>
), ActionName es el método que se llama en el controlador y ControllerName es obviamente el controlador al que desea llamar! El siguiente parámetro es 'Valor de ruta' donde agregaría su área. Si actualmente se encuentra en un Área y desea volver a su raíz,Home/Index
por ejemplo, dejaría el valor como una cadena vacía, por ejemplonew { area = ""}
. El valor final es 'Atributos HTML' y dónde agregaría una clase si lo desea y debería ser unnull
si no tiene ningún atributo para agregar. Pero como el último parámetro se ve como 'Atributos HTML'; para que los valores de ruta sean reconocidos, esto debería sernull
fuente