动态生成的JavaScript,在ASP.NET MVC CSS(Dynamically gener

2019-08-31 12:42发布

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视图。

Answer 1:

最好的解决方案到目前为止,我发现这是以下几点:

动态JavaScript和使用剃刀视图在ASP.NET MVC CSS

你刚才创建视图:CurrentUserOverrides.css.cshtml,ContactViewModel.js.cshtml。 该意见将包含一个HTML块(或),因此智能影音感工作正常。 然后创建控制器呈现这一观点,修剪根标签,并返回适当的内容类型的内容。



Answer 2:

在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;}但我还没有尝试过。 我想这是偏好的问题。
  • 关于我的完整的答案,如果你发现任何语法错误或改进,请让我知道。


Answer 3:

有一个相对较新的语言打字稿 ,我认为可能是你,虽然寻找使用JavaScript的,而不是对CSS。 这里是获取在ASP.NET MVC4该工作职位。



文章来源: Dynamically generated Javascript, CSS in ASP.NET MVC