0

如何设置来自不同控制器的 _Layout.cstml 上可用的标签文本。

例如

如果我想从仪表板导航到产品列表页面。那么我在 _Layout 页面上的标签文本应该是“产品列表”。我从 ProductList 控制器索引方法设置。

提前致谢。

4

5 回答 5

0

使用 _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);
        } 
于 2013-11-02T05:54:19.803 回答
0
  1. 您使用该道具创建 BaseViewModel 类,将 _Layout 的模型设置为此类型并从中派生其他模型。现在您可以从任何派生模型访问该道具
  2. 您使用 ViewBag 或 ViewData
  3. 您在布局视图中创建一个@section 并将其填充到控制器的视图中

如果您在许多控制器中需要 Layout 的字段,那么使用 #1 看起来更可取。

于 2013-11-02T06:45:39.440 回答
0

为什么不使用这种简单的方法:

@{
    ViewBag.Name = "...";
    Layout = "_Layout.cstml";
}

在你的布局中设置你的标签文本@ViewBag.Name

于 2013-11-02T06:47:15.353 回答
0
于 2013-11-02T16:38:40.100 回答
0

布局

<label>@ViewBag.Label</label>

然后只需在控制器中为 ViewBag.Label 分配一个值,它就会自动更改。

public ActionResult OtherPage() 
{
   ViewBag.Label = "Other Label";
}
于 2013-11-02T07:26:07.957 回答