Asp.net core 如何将字符串呈现到Layout.cshtml文件?
我有一个在HomeController中返回字符串的方法Asp.net core 如何将字符串呈现到Layout.cshtml文件?,asp.net-core,model-view-controller,razor,Asp.net Core,Model View Controller,Razor,我有一个在HomeController中返回字符串的方法 public string MyLocation() { return "NYC"; } 我试图在\u Layout.cshtml文件的导航项中显示标记内返回的字符串 <li> <a href="#"> <p font-size:14px"> </p> </a> </li> 您不能将数据发送到布局页(母版页) 将您的位置存储在会话变量中,并在
public string MyLocation()
{
return "NYC";
}
我试图在\u Layout.cshtml
文件的导航项中显示
标记内返回的字符串
<li>
<a href="#"> <p font-size:14px"> </p> </a>
</li>
您不能将数据发送到布局页(母版页)
将您的位置存储在会话变量中,并在master中访问它
页面如下:
和\u布局
页面将为:
<li>
<a href="#">
<p font-size:14px">
@HttpContext.Current.Session["MyLocation"].ToString()
</p>
</a>
</li>
这可能会对您有所帮助。布局文件对使用它的视图(.cshtml文件)一无所知,而视图除了名称之外,对布局文件也一无所知 连接两者的正确方法如下: (1)具有\u布局。cshtml包含
@RenderBody()
语句。此时将显示视图生成的输出
(2)让您的视图文件按名称引用布局文件,也最好使其使用模型
类,并使其呈现部分HTML:
// file Views/Location/MyLocation.cshtml
@model YourProject.Models.Location // See part (3) below
@{
Layout = "_Layout";
}
<h2>My Location</h2>
<div>
City: @(Model.City)
</div>
(4)让控制器中的动作方法创建一个模型对象,并将其发送到视图:
// file Controllers/LocationController.cs
namespace YourProject.Controllers
{
public class LocationController : Controller
{
public IActionResult MyLocation()
{
var model = new Location { City = "NYC" };
return View(model); // This will start MyLocation.cshtml and pass 'model' as a parameter into it
}
}
}
更多信息请点击此处:
作为替代,您可以使用。然后可以省略
Location
Model类,但也将失去Intellisense和编译时有效性检查的所有优点
// file Views/Location/MyLocation.cshtml
@{
Layout = "_Layout";
}
Location: @(ViewBag.Location) <i>(from ViewBag)</i>
可以使用ViewBag方法、模型方法,甚至可以将两者结合使用
您也可以在_布局文件中使用ViewBag,但是您必须确保每个控制器操作方法都在
ViewBag
中提供值,因为它在调用之间是而不是保留的。它说。名称会话在当前上下文中不存在。请检查是否导入了系统命名空间。它应该是有效的,我想这个方法是针对.NET框架的,我使用的是核心,它不起作用。看看这个。这可能会对您有所帮助。我正在尝试将其呈现到_Layout.cshtml文件中,而不是Location.cshtml中……请参阅我刚才添加的替代方案。
// file Controllers/LocationController.cs
namespace YourProject.Controllers
{
public class LocationController : Controller
{
public IActionResult MyLocation()
{
var model = new Location { City = "NYC" };
return View(model); // This will start MyLocation.cshtml and pass 'model' as a parameter into it
}
}
}
// file Views/Location/MyLocation.cshtml
@{
Layout = "_Layout";
}
Location: @(ViewBag.Location) <i>(from ViewBag)</i>
// file Controllers/LocationController.cs
namespace YourProject.Controllers
{
public class LocationController : Controller
{
public IActionResult MyLocation()
{
ViewBag.Location = "NYC";
return View(); // This will start MyLocation.cshtml without a 'model'.
}
}
}