【问题标题】:Putting an ID on <body> in ASP.NET MVC在 ASP.NET MVC 中将 ID 放在 <body> 上
【发布时间】:2009-10-01 12:52:44
【问题描述】:

我希望我的视图能够为位于我的母版页中的&lt;body&gt; 标记指定一个类。

我的第一个想法是做这样的事情:

<asp:Content ContentPlaceHolderID="BodyClassContent" runat="server">
    view-item</asp:Content>

但是,这需要在母版页中使用,这不起作用:

<body class="<asp:ContentPlaceHolder ID="BodyClassContent" runat="server" />">

有什么解决办法吗?

【问题讨论】:

  • 如果你不想让 ViewModel 持有这个,你的视图中的 JavaScript 可以做 ;-)
  • 另一个疯狂的想法是使用您的 BodyCss 属性自定义 ViewPage 类;不确定您是否可以足够早地设置它,但这只是一个想法。老实说,只需使用 ViewData/ViewModel 就可以了 ;-) 或自定义视图引擎,如 Spark。

标签: asp.net-mvc css views


【解决方案1】:

在布局中你可以在body标签上这样做:

<body @RenderSection("BodyAttributes", false)>

然后在您看来,您可以这样做:

@section BodyAttributes {
    id="login" class="login"
}

编辑:我今天也必须使用 VB.NET 和 WebForms 来完成这项工作,并找到了一个方便的链接来实现 equivalent

【讨论】:

    【解决方案2】:

    我会建议一种不同的方法。

    您从 MasterModel 开始创建视图模型的层次结构。当您实例化一个视图对象时,您将一个主体类传递给它。

    public class MasterModel
    {
        string BodyCss { get; set; }
    
        public MasterModel (string bodyCss)
        {
            BodyCss = bodyCss;
        }
    }
    
    public class MyView1Model : MasterModel
        : base ("body-view1")
    {
    }
    

    然后在你的主视图中,应该强类型到 MasterView:

    <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MasterModel>" %>
    

    你只要写:

    <body class="<%= Model.BodyCss %>"></body>
    

    【讨论】:

    • 好主意,但我宁愿在我的模型中没有这个类——我希望视图单独负责布局,从而负责 CSS。
    【解决方案3】:

    您还可以在希望设置它的视图中指定 body id 属性:

    @{
    ViewBag.Title = "Test";
    ViewData["BodyID"] = "test";
    Layout = "~/Views/Shared/_Layout.cshtml";}
    

    这有助于将视图与控制器解耦,控制器(和/或视图模型)不需要知道 body 标签的 id 属性。

    在母版页中设置body标签的id,如下所示:

    <body id="@ViewData["BodyID"]">
    

    【讨论】:

    • 好答案。当 MVC 仅与 WebForms 视图捆绑在一起时,有人提出了这个问题 - Razor 让这变得更好。
    【解决方案4】:

    你为什么不在你的母版页中做:

    <body class="<%=ViewData["bodyClass"].toString()%>">
    

    然后在您的控制器操作中设置 ViewData["bodyClass"]?那应该是等价的……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多