2017-08-28 1 views
1

Lorsque _Layout.cshtml est utilisé par toutes les pages, lorsqu'une image d'arrière-plan est sélectionnée, je souhaite afficher l'image sélectionnée. Mais, malheureusement, je ne sais pas comment transmettre ces données à _Layout.cshtml.Comment transmettre des données à _Layout.cshtml

AT _Layout.cshtml

<style type="text/css"> 
     #body-bg { 
      background-image: url('//I want to change here'); 
     } 
</style> 

Comment dois-je faire? De n'importe quel contrôleur, ces données devraient être passées à _Layout.cshtml mais comment?

+0

Vous pouvez utiliser un modèle de vue de base contenant la propriété, ou le transmettre en utilisant 'ViewBag' ou' ViewData' –

+0

Selon la façon dont la manipulation, vous pouvez utiliser un modèle avec une valeur par défaut aussi. (ie '@RenderSection (...)') – axlj

Répondre

0

La façon la plus robuste utilise une classe viewmodel de base et de mettre une propriété de chaîne pour contenir chemin de l'image:

classe modèle

public class BaseViewModel 
{ 
    public string BackgroundImage { get; set; } 
} 

_Layout.cshtml

@model BaseViewModel 
<!DOCTYPE html> 
<html> 
<head> 
    <!-- other styles, meta tags, etc. --> 
    <style type="text/css"> 
    #body-bg { 
     background-image: url('@Model.BackgroundImage'); 
    } 
</head> 
<body> 
    <!-- body part --> 
    @RenderBody() 
</body> 
</html> 

Si vous utilisez un chemin relatif (par ex. ~/Images/Selected.png) au lieu de chemin absolu pour désigner les chemins d'image, utilisez UrlHelper.Content avec propriété de chaîne comme argument:

#body-bg { 
    background-image: url('@Url.Content(Model.BackgroundImage)'); 
} 

Aussi ne pas oublier de définir la propriété de chaîne de viewmodel à l'intérieur méthode d'action du contrôleur:

public class HomeController : Controller 
{ 
    // other stuff 
    return View(new BaseViewModel { BackgroundImage = "/path/to/image.png" }); 
} 

NB: vous pouvez utiliser ViewBag ou ViewData en plus d'un viewmodel (ils sont tous deux passés automatiquement à la vue), en changeant Model-ViewBag/ViewData:

// View (CSS) 
#body-bg { 
    background-image: url('@ViewBag.BackgroundImage'); 
} 

// Controller 
public class HomeController : Controller 
{ 
    // other stuff 
    ViewBag.BackgroundImage = "/path/to/image.png"; 
    return View(); 
} 

Notez que ViewBag est dynamique, éventuellement une vérification supplémentaire est requise pour empêcher NullReferenceException d'être lancé lors de l'utilisation de la propriété ViewBag.

Références:

Passing Data to Views (MS Documentation)

Pass data to layout that are common to all pages

Passing Data to a Layout Page

0

Essayez le code suivant

Modèle

public class Custom{ 
    public string Image{get;set;} 
} 

Contrôleur

public ActionResult _custombackground() 
{ 
    return view(); 
} 

PartialView _custombackground

<style type="text/css"> 
     #body-bg { 
     background-image: url('/Folder/@Model.Image'); 
    } 
    </style> 

_Layout.cshtml

@Html.Action("_custombackground","YourControllerName")