2017-08-28 136 views
1

すべてのページで使用される_Layout.cshtmlでは、背景画像が選択されているときに、選択した画像を表示します。しかし、残念ながら、このデータを_Layout.cshtmlに渡す方法はわかりません。 _Layout.cshtml_Layout.cshtmlにデータを渡す方法

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

AT

に私はどのようにすればよいですか?どんなコントローラからでも、このデータは_Layout.cshtmlに渡すべきですが、どうですか?

+0

あなたがプロパティを含むベースビューモデルを使用して、またはあなたがそれを処理する方法に応じて 'ViewBag'または' ViewData' –

+0

を使用して、それを渡すことができ、あなたにもあり、既定値でテンプレートを使用することができます。 (つまり、 '@RenderSection(...)') – axlj

答えて

0

最も強力な方法は、基本のviewmodelクラスを使用して、イメージのパスを保持する文字列プロパティを入れている:

モデルクラスを

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> 

相対パスを使用している場合(例: ~/Images/Selected.png)の代わりに、絶対パスの画像パスを参照するために、引数として文字列プロパティとUrlHelper.Contentを使用:

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

NB:

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

は、コントローラのアクションメソッド内のviewmodelの文字列プロパティを設定することを忘れないでください。あなたはViewBag/ViewDataModelを変更することで、(これらは両方とも自動的に表示する渡されている)のviewmodel以外ViewBagViewDataを使用することができます。

​​

ViewBagは、動的であり、ViewBagプロパティを使用するとNullReferenceExceptionがスローされるのを防ぐために追加のチェックが必要であることに注意してください。

参考文献:

Passing Data to Views (MS Documentation)

Pass data to layout that are common to all pages

Passing Data to a Layout Page

0

試しコード以下

モデル

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

コントローラ

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

PartialViewは

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

_layoutを_custombackground。CSHTML

@Html.Action("_custombackground","YourControllerName") 
関連する問題