在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
- 这个答案提供了一个仅视图的解决方案,而不是仅控制器的解决方案
- 我不认为我的答案是“更好”,但我认为对一些人来说可能更容易
- 此答案使用
/**/
注释出一个新的
标记,然后返回代码>在结束样式标记之前:
/*<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;}
- 关于我的全部答案,如果您发现任何语法错误或改进,请告诉我
@{
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();
}