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

Irf*_*aza 14 javascript asp.net-mvc-2 dygraphs

朋友们,

我想在我的应用程序中使用DyGraph.请看下面的代码 -

<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>
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以帮我解决这个问题.

感谢您分享宝贵的时间.

Dar*_*rov 34

您可以定义控制器操作:

public ActionResult Data()
{
    // Obviously this will be dynamically generated
    var data = "alert('Hello World');";
    return JavaScript(data);
}
Run Code Online (Sandbox Code Playgroud)

然后:

<script type="text/javascript" src="<%= Url.Action("Data", "SomeController") %>"></script>
Run Code Online (Sandbox Code Playgroud)

如果您有一些不希望在控制器中生成的复杂脚本,则可以通过定义视图模型来遵循标准MVC模式:

public class MyViewModel
{
    ... put required properties
}
Run Code Online (Sandbox Code Playgroud)

一个控制器动作,它将填充此视图模型并将其传递给视图:

public ActionResult Data()
{
    MyViewModel model = ...
    Response.ContentType = "application/javascript";
    return PartialView(model);
}
Run Code Online (Sandbox Code Playgroud)

最后是一个视图,在这种情况下将是视图模型(~/Views/SomeController/Data.ascx)的javascript表示:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<MyViewModel>" %>
alert(<%= new JavaScriptSerializer().Serialize(Model.Name) %>);
Run Code Online (Sandbox Code Playgroud)