2010-06-22 1 views
0

J'ai donc une page maître avec une image dont la source est une action du contrôleur retournant un flux de fichiers.Affichage d'une image sur une page maître en fonction de l'utilisateur connecté

L'image sera différente pour chaque utilisateur connecté.

maintenant dans ma page masterpage j'ai ce code qui s'appuie sur viewdata.

<img id="dealerlogo" src='/Files/DealerImage/GetDealerLogo/<%=Html.Encode(ViewData["dealerid"]) %>' alt="" /> 

évidemment le problème est que je devrai fournir les vidéotex contenant l'ID sur everycontroller action de retour une vue qui utilise cette page principale, qui est à peu près tous. Y a-t-il une meilleure façon de faire cela? Comme est-il possible d'obtenir le nom d'utilisateur directement dans la vue? Merci!

Répondre

1

Vous pouvez utiliser Page.User.Identity.Name comme dans le fichier logonusercontrol.aspx par défaut créé pour vous lorsque vous créez un nouveau site MVC asp.net.

Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b> 

Donc, pour vous, vous voulez quelque chose comme ceci:

<img id="dealerlogo" src='/Files/DealerImage/GetDealerLogo/<%=Html.Encode(Page.User.Identity.Name) %>' alt="" /> 
+0

Parfait c'est ce que je cherchais! Je vous remercie! – twal

0

Je suppose que votre méthode d'action GetDealerLogo a un paramètre de dealerid. Il est préférable d'écrire quelque chose comme:

<img src="<%= Url.Action("GetDealerLogo", "DealerImage", new { dealerid = ViewData["dealerid"] }) %>" /> 

Rien de mal à le transmettre via ViewData. Vous pouvez également envisager un strongly-typed View ou le vôtre ViewPage base class qui expose une propriété DealerId.

Pour le rendre encore plus propre, j'aime vraiment T4MVC. Il vous permettra d'écrire:

<img src="<%= Url.Action(MVC.DealerImage.GetDealerLogo(dealerid)) %>" /> 

Et, encore plus loin, vous pouvez créer une Html helper, de sorte que vous pouvez écrire:

<%= Html.DealerLogo(dealerid) %> 
2

Vous pouvez facilement résumer cette logique dans une [ChildActionOnly] action qui retourne une vue partielle et utiliser une nouvelle approche MVC 2

<% Html.RenderAction("GetUserPhoto", "User"); %> 

avoir partout dans vos pages de vue sans passer ViewData dans toutes les actions.

est ici la solution:

[ChildActionOnly] 
public ActionResult GetUserPhoto() 
{ 
    ViewData["UserId"] = Page.User.Identity; 
    return PartialView(); 
} 

Et, selon vous, vous utilisez la même logique que vous avez utilisé pour afficher l'image de l'utilisateur. En outre, vous pouvez directement envoyer un fichier FileResult à une vue partielle pour rendre l'image pour vous. Dans cette approche, vous n'avez pas besoin de répéter ViewData["XXXX"] dans toutes les vues et il vous suffit de Rendu la nouvelle vue partielle dans vos vues principales.

+0

J'aime vraiment cette approche aussi, merci. – twal

Questions connexes