全面披露
- 这个答案是从另一个问题复制/粘贴的:
- 该答案与此处的其他答案相似。
- 这个答案使用
cshtml
页面而不是ascx
控件。
- 该答案提供了仅查看解决方案而不是仅控制器解决方案。
- 我不认为我的答案是“更好”,但我认为对某些人来说可能更容易。
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/
轻松地将它们嵌入到任何现有页面(或 in )中:_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;}
,但我还没有尝试过。我想这是一个偏好问题。
- 关于我的整个答案,如果您发现任何语法错误或改进,请告诉我。