Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net mvc中动态生成javascript文件_Javascript_Asp.net Mvc 2_Dygraphs - Fatal编程技术网

在asp.net mvc中动态生成javascript文件

在asp.net mvc中动态生成javascript文件,javascript,asp.net-mvc-2,dygraphs,Javascript,Asp.net Mvc 2,Dygraphs,朋友们 我正在尝试在我的应用程序中使用动态图。请看下面的代码- <head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9"> <title>crosshairs</title> <script type="text/javascript" src="dygraph-combined.js"></scrip

朋友们

我正在尝试在我的应用程序中使用动态图。请看下面的代码-

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">
    <title>crosshairs</title>

    <script type="text/javascript" src="dygraph-combined.js"></script>

    <script type="text/javascript" src="data.js"></script>
  </head>

十字准星
代码使用包含函数的data.js文件获取一些静态数据。 我希望data.js使用控制器方法生成,以便它使用数据库生成数据

有人能帮我解决这个问题吗


感谢分享您宝贵的时间。

您可以定义控制器操作:

public ActionResult Data()
{
    // Obviously this will be dynamically generated
    var data = "alert('Hello World');";
    return JavaScript(data);
}
然后:

<script type="text/javascript" src="<%= Url.Action("Data", "SomeController") %>"></script>
将填充此视图模型并将其传递给视图的控制器操作:

public ActionResult Data()
{
    MyViewModel model = ...
    Response.ContentType = "application/javascript";
    return PartialView(model);
}
最后是一个视图,在本例中是视图模型的javascript表示(
~/Views/SomeController/Data.ascx
):


警惕();

全面披露

  • 此答案是从另一个问题复制/粘贴的:
  • 这个答案与这里的其他答案类似。
    • 此答案使用
      cshtml
      页面,而不是
      ascx
      控件
    • 这个答案提供了一个仅视图的解决方案,而不是仅控制器的解决方案
    • 我不认为我的答案是“更好”,但我认为对一些人来说可能更容易
CSHTML文件中的动态CSS

我使用CSS注释
/**/
注释出一个新的
标记,然后返回在结束样式标记之前:

/*<style type="text/css">/* */

    CSS GOES HERE

@{return;}</style>
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>
@{
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>
[HttpGet]
public ActionResult MyDynamicCss()
{
    Response.ContentType = "text/css";
    return View();
}

[HttpGet]
public ActionResult MyDynamicJavaScript()
{
    Response.ContentType = "application/javascript";
    return View();
}
使用控制器(可选)

如果您愿意,您可以创建一个控制器,例如

<link rel="stylesheet" type="text/css" href="@Url.Action("MyDynamicCss", "MyDynamicCode")">
<script type="text/javascript" src="@Url.Action("MyDynamicJavaScript", "MyDynamicCode")"></script>
注释

  • 未测试控制器版本。我只是在头顶上打了下来
  • 重新阅读我的答案后,我突然想到,注释掉结束标记可能比使用cshtml
    @{return;}
    更容易,但我没有尝试过。我想这是一个偏好的问题
  • 关于我的全部答案,如果您发现任何语法错误或改进,请告诉我

感谢Darin的快速回复和详细解释+因此,以这种方式生成的.Javascript文件不会被压缩。我敢打赌,这与请求不以.js和iis结尾有关。这里有一个类似的问题,有更优雅的解决方案:
@{
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>
<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>
[HttpGet]
public ActionResult MyDynamicCss()
{
    Response.ContentType = "text/css";
    return View();
}

[HttpGet]
public ActionResult MyDynamicJavaScript()
{
    Response.ContentType = "application/javascript";
    return View();
}