如何解决与ASP.NET MVC中的ASP.NET等效 MyViewModel.cs _Layout.cshtml
目前,我可以在ASP.NET Webforms
的页面加载事件中使用代码隐藏功能来引用body标签,并在此处添加以下代码:
HtmlGenericControl body = (HtmlGenericControl)this.Master.FindControl("body1");
body.Style["background-image"] = Page.ResolveUrl("~/images/somepic.jpg");
body.Style["background-position"] = "0px 0px";
body.Style["background-repeat"] = "no-repeat";
我想知道ASP.NET MVC
是否可以实现?预先非常感谢。
解决方法
将样式规则作为String
值添加到View-Model类,然后在视图中呈现它:
class MyViewModel
{
public String BodyStyle { get; set; } = @"background-repeat: no-repeat; background-position: 0 0;";
}
@model MyViewModel
<body style="@( this.Model.BodyStyle )">
</body>
但是样式规则实际上不应该直接在元素上设置,您应该在样式表中使用CSS或使用<style>
元素,如果样式<body>
是特定于页面的,则使用{{ 1}}放在class=""
或<body>
上,就像这样:
<html>
class MyViewModel
{
public String BodyClass { get; set; } = "foobar";
}
当这些元素应用于您的@model MyViewModel
<html>
<head>
<style type="text/css">
body {
}
body.foobar {
background-image: url("@Url.Content("~/images/somepic.jpg")");
background-position: 0 0;
background-repeat: no-repeat;
}
</style>
</head>
<body class="@( this.Model.BodyClass )">
</body>
内的<body>
元素(而不是每个_Layout.cshtml
文件中)时,您需要使用一个通用的视图模型界面并取消引用您的.cshtml
中的内容:
MyViewModel.cs
_Layout.cshtml
_Layout.cshtml
interface ICommonPageViewModel
{
String BodyClass { get; }
}
class MyViewModel : ICommonPageViewModel
{
public String BodyClass { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。