2009-05-17 17 views
4

Donc, j'ai un pied de page qui apparaîtra sur chaque page de mon application webASP.net mvc données communes pour le pied de page

J'ai besoin pour rendre les données dynamiques si .... cela signifie que tous les besoins d'action du contrôleur pour retourner viewData qui contient ces données .. ainsi que les données spécifiques à l'action

Comment les gars mettriez-vous cela en pratique? Le constructeur d'un contrôleur de base peut-être?

Répondre

5

Vous êtes sur la bonne voie avec l'idée de contrôleur de base, mais je voudrais remplacer OnActionExecuted et générer les données là-bas. Vérifiez si le résultat va être un ViewResult avant de générer les données communes. Il n'est pas nécessaire de générer les données si le résultat est une redirection ou des données remontant via AJAX.

Vous pouvez également envisager de créer un modèle de vue seule pour les données communes (si les données sont étendues) et de les placer dans ViewData dans son ensemble. Vous pouvez ensuite créer une vue partielle fortement typée qui prend le modèle et utilise plus facilement les propriétés du modèle dans la vue. Le rendu de cette vue partielle à partir de la page maître faciliterait l'incorporation des données sur chaque page et l'utiliserait de manière fortement typée.

Si les données de pied de page ou le formatage ne sont pas compliqués, il suffit probablement de placer la marque dans la page maître.

0

Si les données ne sont pas complexes que j'utilise le dictionnaire ViewData pour stocker ces informations. Si c'est le cas, je place les données de pied de page dans une classe de base pour tous les modèles, puis déplace le pied de page dans un ContentPlaceholder. C'est un peu plus agaçant que vous devez le mettre sur toutes les pages View.

2

Vous pouvez créer un ActionFilter qui écrit les données dans le ViewData comme ceci:

public class CustomActionFilter : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["WillNeedThis"] = "Foo"; 
    } 
} 

décorer ensuite vos contrôleurs et/ou des actions qui va avoir besoin que les données:

[CustomActionFilter] 
public class HomeController : Controller { 
    ... 
} 
1

Qu'en est-il en utilisant la méthode Html.RenderAction() de l'assembly MVC Futures?

- Site.master -

<div id="footer"> 
     <% Html.RenderAction("SomeAction", "SomeController", 
       new { someParam = ViewData["someValue"] }); %> 
    </div> 

Certains pourraient soutenir que cette brouille les eaux de vue et la séparation du contrôleur, et je ne ferais pas probablement cela dans un ViewPage, mais je le vois comme une alternative décente dans une MasterViewPage.

flamme sur;)