2012-01-03 4 views
6

¿Hay alguna manera de reducir estos en un solo resultado grupal? Tengo un conjunto de páginas como estas que simplemente devuelven contenido estático y pensé que debía haber una forma más eficiente de hacerlo.¿Puedo simplificar este código para las vistas de devolución? Parece muy redundante

public ActionResult Research() 
    { 
     return View(); 
    } 

    public ActionResult Facility() 
    { 
     return View(); 
    } 

    public ActionResult Contact() 
    { 
     return View(); 
    } 

EDIT: Gracias por todas las respuestas :)

+0

¿Qué es este código? –

+0

Este es el código en un controlador del marco ASP.NET MVC3 de microsoft. –

+3

Puede eliminar las nuevas líneas. – SLaks

Respuesta

9

Usted puede hacer que un método de acción compartida que toma un parámetro viewName:

public ActionResult Show(string viewName) 
{ 
    return View(viewName); 
} 

Usted puede encaminar entonces esos nombres a esta acción:

routes.MapRoute(
    "Simple Content", 
    "/{viewName}", 
    new { controller = "Something", action = "Show" }, 
    new { viewName = "Research|Facility|Contact" } 
); 

La restricción viewName es necesaria para evitar th es la ruta desde la coincidencia de URL arbitrarias.

Tenga en cuenta que esta es una vulnerabilidad de divulgación de información; un atacante puede solicitar /ControllerName/Show?viewName=~/Views/Secret/View.
Si tiene puntos de vista confidenciales que no usan modelos, debe validar el viewName en la acción. Para hacer eso, puede usar una enumeración, como en dknaack's answer.

+4

Me ganaste. Creo que esto es en realidad una forma menos intuitiva y menos escalable de hacerlo y yo personalmente lo dejaría como está (OP). – LukeP

2

se podría crear una nueva ruta que tomaría solamente controllername/{path}, y el camino será su nombre de la vista a continuación, en la acción del controlador algo como esto

public ActionResult Page(string path) 
{ 
    return View(path); 
} 

Lo que ir a esta ruta

yourdomain.com/controllername/Ijusttest cargará una vista desde ~/Views/controllername/Ijusttest.cshtml. Solo tienes que asegurarte de llamar la acción de la ruta.

Espero que tenga sentido. Puede configurarlo de manera diferente, todo depende de la ruta que cree. Avíseme si necesita ayuda con el código de ruta.

0

Es posible que desee crear una acción y pasar un argumento como el nombre de la página, por ejemplo

public StaticContent : Controller 
{ 
    public ActionResult Pages(string id) 
    { 
    return View(id); 
    } 
} 

Donde id puede tener los valores "Investigación", "Instalación", etc.

Usted obtendría url como estos/staticcontent/pages/research

Simplemente nombre las Vistas en la carpeta StaticContent Research.cshtml por ejemplo.

Cuestiones relacionadas