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"
}