2011-12-26 4 views
0

Dans la vue partielle, je dois accéder à la variable SessionLoginInfo qui contient un objet LoginInfo. J'ai essayé ce qui suit:Difficulté de vue partielle ASP.NET MVC

@LoginInfo info = @(LoginInfo)Session["LoginInfo"] 

Mais il me donne des erreurs de compilateur. Qu'est-ce que je fais mal?

Répondre

14

Qu'est-ce que je fais mal? \

Beaucoup de choses. La première chose que vous avez mal fait est la syntaxe Razor. Il devrait être:

@{ LoginInfo info = (LoginInfo)Session["LoginInfo"]; } 

Mais c'est juste la syntaxe. Vous avez un problème beaucoup plus important. Vous avez un problème de conception. Vous violez le modèle MVC.

Une vue ne doit pas essayer d'extraire des données. Une vue utilise les données qui lui sont transmises à partir de l'action du contrôleur sous la forme d'un modèle de vue.

Vous définir un modèle de vue:

public class MyViewModel 
{ 
    public LoginInfo LoginInfo { get; set; } 
} 

alors vous avez une action de contrôleur:

public ActionResult Foo() 
{ 
    var model = new MyViewModel(); 
    model.LoginInfo = (LoginInfo)Session["LoginInfo"]; 
    return View(model); 
} 

alors vous avez une vue fortement typé dans lequel vous utilisez le modèle de vue:

@model MyViewModel 
<div>Hello @Model.LoginInfo.FirstName</div> 

Mais dans ce cas (vu le nom de la classe LoginInfo) je suppose que yo Vous essayez d'afficher un widget commun sur toutes les vues. Ce serait un bon candidat pour utiliser le Html.Action helper.

donc vous définissez l'action du contrôleur qui récupérera ces informations à partir d'une source de données (session dans votre cas):

[ChildActionOnly] 
public ActionResult LoginInfo() 
{ 
    var model = (LoginInfo)Session["LoginInfo"] ?? new LoginInfo(); 
    return PartialView(model); 
} 

puis vous définissez un correspondant partielle:

@model LoginInfo 
<div>Hello @Model.FirstName @Model.LastName</div> 

et enfin votre _layout vous pouvez inclure ce widget quelque part:

@Html.Action("LoginInfo", "SomeController") 
+0

Je ne comprends pas de ChildActionOn ly et ci-dessous pouvez-vous expliquer comment avoir la session visible dans le partiel – Demodave

Questions connexes