Can anyone help me with the subject? I'm using Razor view engine and I need to pass some data to _Layout. How can I do it?
问题:
回答1:
As usual you start by creating a view model representing the data:
public class MyViewModel
{
public string SomeData { get; set; }
}
then a controller which will fetch the data from somewhere:
public class MyDataController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
SomeData = "some data"
};
return PartialView(model);
}
}
then a corresponding view (~/Views/MyData/Index.cshtml
) to represent the data:
@{
Layout = null;
}
<h2>@Model.SomeData</h2>
and finally inside your _Layout.cshtml
include this data somewhere:
@Html.Action("index", "mydata")
回答2:
You could use the ViewBag to pass data.
In your controller:
ViewBag.LayoutModel = myData;
Access in you layout:
@ViewBag.LayoutModel
It is a dynamic object, so you can use any property name you want.
回答3:
The ViewBag method is the easiest. However if you need advanced and typed features, you can also try taking that part to a partial view (the part that'll render the dependent section) with a common controller (if the value can be calculated on it's own and doesn't need input from other controllers), and call RenderPartial on it from _Layout.
If you'd like I can give you some more info about it...