2 votes

Le rasoir. ASP.NET MVC 3. Création dynamique de pages/contenus

Le problème pour moi est de comprendre comment rendre les pages créées dynamiquement avec une URL unique lorsque la page n'a pas de contrôleur/vue à laquelle se rattacher.

Je suis en train de construire un système CMS en ASP.NET MVC 3 3 avec Razor. Je stocke la structure et le contenu des pages/sites dans une base de données.

Je suppose que j'ai besoin d'une action de rendu dans un contrôleur qui crée une vue personnalisée avec le contenu de la base de données ? et qu'en est-il des URL ?

3voto

Sergey Kudriavtsev Points 6090

Je créerais un dossier séparé (comme "DynamicContent" ou autre) pour y placer ces pages dynamiques et j'ajouterais les informations correspondantes. IgnoreRoute à la méthode RegisterRoutes dans Global.asax.cs, comme ceci :

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("DynamicContent/{*pathInfo}");

    ...
}

Ensuite, les utilisateurs pourront accéder à ces pages à l'aide d'URL tels que

http://%your_site%/DynamicContent/%path_to_specific_file%

MISE À JOUR

Si vous ne souhaitez pas placer de fichiers sur le disque dur du serveur, vous pouvez créer un contrôleur spécial pour ces fichiers. La route à suivre pour cela devrait ressembler à ceci :

public static void RegisterRoutes(RouteCollection routes)
{
    ...

    routes.MapRoute(
        "DynamicRoute", // Route name
        "Dynamic/{*pathInfo}", // URL with parameters
        new { controller = "Dynamic", action = "Index"} // Parameter defaults
    );

}

Votre DynamicController.cs devrait ressembler à ceci :

public class DynamicController : Controller
{
    public ActionResult Index(string pathInfo)
    {
        // use pathInfo value to get content from DB
        ...
        // then 
        return new ContentResult { Content = "%HTML/JS/Anything content from database as string here%", ContentType = "%Content type either from database or inferred from file extension%"}
        // or (for images, document files etc.)
        return new FileContentResult(%file content from DB as byte[]%, "%filename to show to client user%");
    }
}

Notez que l'astérisque (*) devant pathInfo fera en sorte que cette route prenne toute la partie de l'URL après Dynamic - Ainsi, si vous avez saisi http://%your_site%/Dynamic/path/to/file/something.html puis une chaîne entière path/to/file/something.html sera passé en paramètre pathInfo à la méthode DynamicController/Index.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X