Asp.net mvc 在<;车身>;在ASP.NETMVC中

Asp.net mvc 在<;车身>;在ASP.NETMVC中,asp.net-mvc,css,views,Asp.net Mvc,Css,Views,我希望我的视图能够为位于母版页中的标记指定一个类 我的第一步是这样做: <asp:Content ContentPlaceHolderID="BodyClassContent" runat="server"> view-item</asp:Content> 视图项 但是,这需要在母版页中执行此操作,而母版页不起作用: <body class="<asp:ContentPlaceHolder ID="BodyClassContent" runat=

我希望我的视图能够为位于母版页中的
标记指定一个类

我的第一步是这样做:

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

视图项
但是,这需要在母版页中执行此操作,而母版页不起作用:

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


有什么解决办法吗?

为什么不在母版页中执行以下操作:

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


然后在控制器操作中设置ViewData[“bodyClass”]?这应该相当于…

我建议采用不同的方法

从主模型开始,创建视图模型的层次结构。实例化视图对象时,会向其传递一个主体类

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

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

public class MyView1Model : MasterModel
    : base ("body-view1")
{
}
然后在主视图中,该主视图应为主视图的强类型:

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

你只要写:

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

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

@{
ViewBag.Title = "Test";
ViewData["BodyID"] = "test";
Layout = "~/Views/Shared/_Layout.cshtml";}
这有助于将视图与控制器解耦,控制器(和/或视图模型)不需要知道body标记的id属性

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

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

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

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

编辑:我今天还必须使用VB.NET和WebForms来完成这项工作,并找到了一个实现

好主意的便捷链接,但我不希望在我的模型中有类–我希望视图单独负责布局,因此,如果不希望ViewModel持有此内容,视图中的CSS.JavaScript可以做到;-)另一个疯狂的想法是使用BodyCss属性定制ViewPage类;我不确定你是否能提前设置,但这只是一个想法。老实说,只要使用ViewData/ViewModel,就可以了;-)或者像Spark这样的自定义视图引擎。回答得好。当MVC只与WebForms视图捆绑在一起时,有人问这个问题——Razor让它变得更好。
@section BodyAttributes {
    id="login" class="login"
}