ASP.NET允许动态生成使用服务器标签(剃刀或ASPX)HTML。 但有产生*的.js或者*的CSS内容的方式一样,不是使用内联(嵌入式)CSS / JavaScript的其他任何好办法。 时下像Ajax技术越来越从服务器端的Javascript更多的逻辑转移到客户端。 这将是巨大的,有这样的机会来生成JS动态使用ASP.NET提供了生成HTML的所有灵活性。
例如,我的JavaScript包含淘汰赛视图模型声明的 JavaScript渲染过程中,从服务器加载初始数据 ,以及其他一些JS的功能,所以在我的HTML 而不是嵌入的脚本我想有这样的脚本引用:
<script src="~/Scripts/ContactViewModel.js?contactId=@Model.ContactId"></script>
又如,当开发人员可能需要使用基于用户配置文件的CSS。 用户配置文件信息包含必须CSS生成过程中受到尊重,所以在我看来,我会碰到这样的样式信息(字体,颜色,不只是主题):
<link href="~/Styles/CurrentUserOverrides.css" rel="stylesheet" />
CurrentUserOverrides.css将动态基于认证的用户的简档数据来生成。
如何做到这一点使用ASP.NET MVC? 我想找到解决方案,让我这样做容易,因为我创建使用ASP.NET动态HTML,与正常工作intellisence和其他一切东西VS提供了ASP.NET视图。
最好的解决方案到目前为止,我发现这是以下几点:
动态JavaScript和使用剃刀视图在ASP.NET MVC CSS
你刚才创建视图:CurrentUserOverrides.css.cshtml,ContactViewModel.js.cshtml。 该意见将包含一个HTML块(或),因此智能影音感工作正常。 然后创建控制器呈现这一观点,修剪根标签,并返回适当的内容类型的内容。
在CSHTML文件动态CSS
我使用CSS的意见/* */
注释掉一个新<style>
标记,然后我return;
闭幕风格标记之前:
/*<style type="text/css">/* */
CSS GOES HERE
@{return;}</style>
在CSHTML文件动态JS
我使用JavaScript注释<!--//
注释掉一个新<script>
标记,然后我return;
关闭脚本标记之前:
//<script type="text/javascript">
JAVASCRIPT GOES HERE
@{return;}</script>
MyDynamicCss.cshtml
@{
var fieldList = new List<string>();
fieldList.Add("field1");
fieldList.Add("field2");
}/*<style type="text/css">/* */
@foreach (var field in fieldList) {<text>
input[name="@field"]
, select[name="@field"]
{
background-color: #bbb;
color: #6f6f6f;
}
</text>}
@{return;}</style>
MyDynamicJavsScript.cshtml
@{
var fieldList = new List<string>();
fieldList.Add("field1");
fieldList.Add("field2");
fieldArray = string.Join(",", fieldList);
}
//<script type="text/javascript">
$(document).ready(function () {
var fieldList = "@Html.Raw(fieldArray)";
var fieldArray = fieldList.split(',');
var arrayLength = fieldArray.length;
var selector = '';
for (var i = 0; i < arrayLength; i++) {
var field = fieldArray[i];
selector += (selector == '' ? '' : ',')
+ 'input[name="' + field + '"]'
+ ',select[name="' + field + '"]';
}
$(selector).attr('disabled', 'disabled');
$(selector).addClass('disabled');
});
@{return;}</script>
否控制器所需(使用查看/共享)
我把我的两个动态脚本到Views/Shared/
我可以很容易地将它们嵌入到任何现有的页面(或_Layout.cshtml
使用下面的代码):
<style type="text/css">@Html.Partial("MyDynamicCss")</style>
<script type="text/javascript">@Html.Partial("MyDynamicJavaScript")</script>
使用控制器(可选)
如果你愿意,你可以创建一个控制器如
<link rel="stylesheet" type="text/css" href="@Url.Action("MyDynamicCss", "MyDynamicCode")">
<script type="text/javascript" src="@Url.Action("MyDynamicJavaScript", "MyDynamicCode")"></script>
这里的控制器可能是什么样子
MyDynamicCodeController.cs(可选)
[HttpGet]
public ActionResult MyDynamicCss()
{
Response.ContentType = "text/css";
return View();
}
[HttpGet]
public ActionResult MyDynamicJavaScript()
{
Response.ContentType = "application/javascript";
return View();
}
笔记
- 控制器版本未经测试。 我刚才输入的是把我的头顶。
- 在重新阅读我的回答后,我突然想起这可能是一样容易注释掉结束标记,而不是使用CSHTML
@{return;}
但我还没有尝试过。 我想这是偏好的问题。 - 关于我的完整的答案,如果你发现任何语法错误或改进,请让我知道。
有一个相对较新的语言打字稿 ,我认为可能是你,虽然寻找使用JavaScript的,而不是对CSS。 这里是获取在ASP.NET MVC4该工作职位。