Il est possible de créer un "simulacre de gestion de multi views selon le browser en interceptant l'action dans le controlleur. Ce ne sera pas aussi performant que sous RoR. En effet, si on ne précise pas de vue à appliquer, il prendra celle par défaut ... Pour gérer tous ces cas, il faudrait modifier plus en profondeur la dll System.Web.MVC ce qui n'est pas le but de ce post.

  • Structure de la solution
    Arbre MVC
  • Implémentation du Custom controlleur
    public abstract class ControllerCustomView : Controller
    {
    protected abstract string DefaultDirectory { get; }

    protected abstract string FirefoxDirectory { get; }

    protected override ViewResult View(string viewName,
    string masterName,
    object model)
    {
    ViewResult result = base.View(viewName, masterName, model);
    if (!string.IsNullOrEmpty(viewName))
    result.ViewName = GetDirectory() + viewName;
    return result;
    }

    private string GetDirectory()
    {
    string value = Request.Browser.Browser;
    return (value.Contains("Firefox")
    ? FirefoxDirectory
    : DefaultDirectory)
    + @"\";

    }
    }
  • Implémentation d'un controlleur héritant de cette classe
    [HandleError]
    public class HomeController : ControllerCustomView
    {
    protected override string DefaultDirectory
    {
    get { return "Default"; }
    }

    protected override string FirefoxDirectory
    {
    get { return "Firefox"; }
    }


    public ActionResult Index()
    {
    ViewData["Title"] = "Home Page";
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    return View();
    }

    public ActionResult Products()
    {
    var products = new List<Product>()
    {
    new Product(){ ID = 1, Name="Olive"},
    new Product(){ID = 2, Name="Machine"}
    };

    return View("Products", products);
    }
    }
  • Résultat
    MVC_Mozilla.png MVC_IE.png
  • Limitations
    Il n'y a pas encore d'intégration complète de ce "multi view" en ASP.NET MVC. Mais il est possible de réaliser certains développements pour un browser particulier. Il faudrait modifier plus en profondeur le coeur du système pour supporter ce mécanisme. Avis aux amateurs ?