2016-05-05 6 views
0

Ich habe auf Dynamic CSS nachgelesen und einen Weg gefunden, dies mit Stack Overflow zu tun und es an das anzupassen, was ich brauchte.Ein ViewModel in die CSS-Datei übergeben

erhalten die Daten in das Modell geladen kein Problem, aber sobald der Debugger die Aufrufe bekomme ich den Fehler:

Object is not a reference of an object

Base-Controller:

public ActionResult CssDynamic() 
{ 
    Layout page = new Layout(); 
    var dummyCorpId = 80; 

    page.Css = GetCss(dummyCorpId); 

    var model = page; 
    return new CssViewResult(model); 
} 

Teilansicht Zurück

public class CssViewResult : PartialViewResult 
{ 
    private readonly object model; 

    public CssViewResult(object model) 
    { 
     this.model = model; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     context.HttpContext.Response.ContentType = "text/less"; 
     base.ExecuteResult(context); 
    } 
} 

Der Blick:

@model SpecCheck.Portals.Web.UI.ViewModels.Layout 

//BRAND COLOURS/////////////////////////////////////////////////////////// 
//One--------------------------------------------------------------------- 
@@brand1: #@Model.Css.CssBrandColor1; 
@@brand1dark: darken(@@brand1, 25%); 
@@brand1darker: darken(@@brand1, 50%); 
@@brand1light: lighten(@@brand1, 25%); 
@@brand1lighter: lighten(@@brand1, 50%); 
//Two-------------------------------------------------------------------- 
@@brand2: #@Model.Css.CssBrandColor2; 
@@brand2dark: darken(@@brand2, 25%); 
@@brand2darker: darken(@@brand2, 50%); 
@@brand2light: lighten(@@brand2, 25%); 
@@brand2lighter: lighten(@@brand2, 50%); 

//ADDITIONAL COLORS////////////////////////////////////////////////////// 
//Mono-------------------------------------------------------------------- 
@@blk: #000000; 
@@wht: #FFFFFF; 
//Additional Bobcat Colours (Non-Brand)----------------------------------- 
@@addColour1: #@Model.Css.CssAddColor1; 
@@addColour2: #@Model.Css.CssAddColor2; 
@@addColour3: #@Model.Css.CssAddColor3; 
//Feedback Colors--------------------------------------------------------- 
@@success: #00cc00; 
@@warning: #ffdb4d; 
@@danger: #ff4d4d; 

//TEXT//////////////////////////////////////////////////////////////////// 
//Properties-------------------------------------------------------------- 
@@fontcolour: @Model.Css.CssFontColor; 
@@fontsize: @Model.Css.CssFontSize px; 
@@fontfamily: @Model.Css.CssFontFamily; 
@@fontweight: @Model.Css.CssFontWeight; 

//BUTTONS///////////////////////////////////////////////////////////////// 
.button { 
    border: 0 none; 
    border-radius: 2px 2px 2px 2px; 
    color: @@brand1; 
    cursor: pointer; 
    display: inline-block; 
    line-height: 20px; 
    margin-bottom: 0; 
    margin-top: 10px; 
    padding: 7px 10px; 
    text-transform: none; 
    transition: all 0.3s ease 0s; 
    -moz-transition: all 0.3s ease 0s; 
    -webkit-transition: all 0.3s ease 0s; 
    width: auto; 
    background: none repeat scroll 0 0 @@brand2; 
    white-space: nowrap; 
    font-variant: small-caps; 
    &:hover { 
    background-color: @@brand2darker; 
    color: @@brand1lighter; 
    text-decoration:underline; 
    } 
} 

Und die _Layout Seite:

<link href="@Url.Action("CssDynamic", "Base")" rel="stylesheet" type="text/less"/> 

Antwort

1

Soweit ich zu verstehen, müssen Sie CSS-Dateien mit Rasiermesser-Ansicht-Engine eine benutzerdefinierte Ansicht Motor schaffen für das Rendern.

Diese SO Antwort hat mehr Informationen über sie: Dynamic Stylesheets Using Razor

+0

In diesem Beispiel - wo würden Sie die CSSViewEngine Klasse speichern? In Modellen oder Controllern oder spielt es keine Rolle? –

+0

Sie können dafür ein separates Projekt erstellen, damit Sie diese DLL in anderen Projekten wiederverwenden können, aber das spielt keine Rolle. Setzen Sie es, wann immer Sie das Gefühl haben, dass es mehr Sinn ergibt. –

+0

Arbeitete wie ein Charme, danke! –

Verwandte Themen