如何设置来自不同控制器的 _Layout.cstml 上可用的标签文本。
例如
如果我想从仪表板导航到产品列表页面。那么我在 _Layout 页面上的标签文本应该是“产品列表”。我从 ProductList 控制器索引方法设置。
提前致谢。
如何设置来自不同控制器的 _Layout.cstml 上可用的标签文本。
例如
如果我想从仪表板导航到产品列表页面。那么我在 _Layout 页面上的标签文本应该是“产品列表”。我从 ProductList 控制器索引方法设置。
提前致谢。
使用 _Layout.cshtml 中的 ViewBag.xyz。从控制器操作传递视图数据,它将显示在您的 html 页面上。
注意:- 如果您的意思是别的,请确认我。如果这并不意味着您要查找的内容,我将更新我的答案。
看起来您想为每个控制器设置不同的 ViewBag.Xyz。
我建议您使用 ActionFilterAttribute 使其工作。代码将是这样的。
public class DashboardCustomData : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewBag.xyz = "This is my Dashboard page";
base.OnActionExecuting(filterContext);
}
}
现在把这个 Actionfilter 放到每个控制器上。您需要为每个具有不同标题的控制器使用不同的 ActionFilter。完成此操作后,您无需从每个控制器手动设置它。
如果你不喜欢编写多重过滤器,那么试试这个。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string controllerName = filterContext.RouteData.Values["Controller"].ToString();
string ActionName = filterContext.RouteData.Values["Action"].ToString();
if (controllerName == "Dashboard")
{
filterContext.Controller.ViewBag.xyz = "This is my Dashboard page";
}
else
{
}
base.OnActionExecuting(filterContext);
}
如果您在许多控制器中需要 Layout 的字段,那么使用 #1 看起来更可取。
为什么不使用这种简单的方法:
@{
ViewBag.Name = "...";
Layout = "_Layout.cstml";
}
在你的布局中设置你的标签文本@ViewBag.Name
布局
<label>@ViewBag.Label</label>
然后只需在控制器中为 ViewBag.Label 分配一个值,它就会自动更改。
public ActionResult OtherPage()
{
ViewBag.Label = "Other Label";
}