2011-01-01 9 views
0

Wenn ich einen Sitzungswert auf einer Masterseite anzeigen (<%: Session["companyname"].ToString() %>), werden die folgenden Informationen auf der Seite { CompanyName = TestCompany} angezeigt. Wie bekomme ich nur den Wert?ASP.Net MVC Anzeigen eines Sitzungswerts in einer Masterseite

Danke für Ihre Hilfe!

+0

Können Sie den Code zeigen, wo der Wert in der Session gespeichert wird? – tvanfosson

+0

Ich würde sagen, dass das Objekt, das unter 'Session [" Firmenname "] gespeichert ist, keine' Zeichenkette' ist, sondern aus einer Klasse besteht, die eine benutzerdefinierte '.ToString()' Überschreibung implementiert. – hangy

+0

@hangy - Ich vermute ein anonymes Objekt, aber ohne den Code ist es schwer zu sagen. – tvanfosson

Antwort

5

Wenn Sie den Code anzeigen können, in dem der Wert in der Sitzung gespeichert wird, ist es wahrscheinlicher, dass ich helfen konnte. Ich würde jedoch vorschlagen, dass Sie den Wert aus der Sitzung aus Ihrer Sicht noch einmal überdenken möchten. Es wäre meiner Meinung nach besser, ein Basisansichtsmodell zu haben, auf dem alle Ihre Ansichtsmodelle basieren, auf denen die Eigenschaft CompanyName und alle anderen für Ihre Masterseite erforderlichen allgemeinen Eigenschaften vorhanden sind. Ihre Masterseite könnte dann stark in das Basisansichtsmodell eingegeben werden, und Sie könnten die Werte aus dem Modell verwenden. Ich habe dieses Muster mit gutem Erfolg bei einigen Projekten verwendet. Verbinden Sie es mit einem Basis-Controller, wo die gemeinsamen Eigenschaften für Ansichtsergebnisse in OnActionExecuted() aufgefüllt werden, kann es sehr effektiv sowohl in der Reduzierung der Code-Duplizierung und die Verwendung von magische Zeichenfolgen in Ihren Ansichten sein.

Modell:

public abstract class CommonViewModel 
{ 
    public string CompanyName { get; set; } 
    public string UserDisplayName { get; set; } 
    ... 
} 

Controller:

public abstract class BaseController 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if (filterContext.Result is ViewResult) 
     { 
      var model = filterContext.ViewData.Model as CommonViewModel; 
      if (model != null) 
      { 
       model.CompanyName = Session["CompanyName"] as string; 
       model.UserDisplayName = Session["UserDisplayName"] as string; 
      } 
     } 
    } 
} 

Master-Seite:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Foo.CommonViewModel>" %> 
<!-- ... --> 
<div> 
    <%: Model.CompanyName %> 
</div> 
<!-- ... --> 
<div> 
    <%: Model.UserDisplayName %> 
</div> 
Verwandte Themen