在ASP.NET MVC中的<body>上放置一个ID

Guð*_*r H 3 css asp.net-mvc views

我希望我的视图能够为<body>标记指定一个类,它位于我的母版页中.

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

<asp:Content ContentPlaceHolderID="BodyClassContent" runat="server">
    view-item</asp:Content>
Run Code Online (Sandbox Code Playgroud)

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

<body class="<asp:ContentPlaceHolder ID="BodyClassContent" runat="server" />">
Run Code Online (Sandbox Code Playgroud)

对此有何解决方案?

小智 5

我建议采用不同的方法。

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

public class MasterModel
{
    string BodyCss { get; set; }

    public MasterModel (string bodyCss)
    {
        BodyCss = bodyCss;
    }
}

public class MyView1Model : MasterModel
    : base ("body-view1")
{
}
Run Code Online (Sandbox Code Playgroud)

然后在您的主视图中,应将其强类型化为 MasterView:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MasterModel>" %>
Run Code Online (Sandbox Code Playgroud)

你只需写:

<body class="<%= Model.BodyCss %>"></body>
Run Code Online (Sandbox Code Playgroud)


And*_*ams 5

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

@{
ViewBag.Title = "Test";
ViewData["BodyID"] = "test";
Layout = "~/Views/Shared/_Layout.cshtml";}
Run Code Online (Sandbox Code Playgroud)

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

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

<body id="@ViewData["BodyID"]">
Run Code Online (Sandbox Code Playgroud)


Dev*_*ave 5

在布局中,您可以在body标签上执行此操作:

<body @RenderSection("BodyAttributes", false)>
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以这样做:

@section BodyAttributes {
    id="login" class="login"
}
Run Code Online (Sandbox Code Playgroud)

编辑:我今天也必须使用VB.NET和WebForms,并找到了实现等效的方便链接