如何从razor视图将参数传递给引用的javascript文件

时间:2011-08-21 11:41:50

标签: javascript asp.net-mvc-3

如果我的剃刀中有javascript这样的话:

@{
    Grid grid = @Model.GetGridFromModel();

    Bool isSomething = @Model.GetSomething();

    Bool isSomethingMore  = @Model.GetSomehtingMore();

    Bool isSomethingElse = @Model.GetSomethingElse()

    int caseCount = 0;
 }  



$(document).ready(function () {    
    $("#tabs").tabs({
        show: function (event, ui) {        
            switch (ui.index) {
            @if (isSomething){
            <text>
                case @caseCount:                    

                    change('@grid.Avalue');

                    break;
            </text>
                caseCount++;
                }

            @if(isSomethingElse){
            <text>   
                case @caseCount:

                    change('@grid.Bvalue');
                    break;
            </text>
                caseCount++;
                }

            @if (isSomethingElseMore){
            <text> 
                case @caseCount:
                    change('@grid.Cvalue');
                    break;
                </text>                 
                }
            }
        }
    });

    funciton change(id)
    {
    //doing somehting;
    }

所以我想把这个javascript放在单独的文件中并将该文件引用到我的视图中,问题是当javascript在单独的文件中时,我如何将值从razor传递给javascript?

2 个答案:

答案 0 :(得分:7)

Javascript 是未经编译器解析的文件,因此,您没有机会......

然而,您可以使用动态javascript,例如:

<script src="/CustomScripts/scripts.js"><script>

有一条路线说:

routes.MapRoute(
    "CustomScripts", "CustomScripts/{id}",
    new { controller = "Scripts", action = "GetFile" }
);

创建您的控制器并使用简单的return View();之类的

public ActionResult GetFile(string id)
{
    // use id as you please

    // pass any Model you want

    return View();
}

在该视图中,只需将您的javascript设为 Razor语法


或者你可以使用变量并加载它们来使用RenderSection()

在您的_Layout.cshtml文件中

在任何其他javascript之前在<head>中添加一个部分

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

    @RenderSection("script_variables", false)

    <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-2.0.6-development-only.js")" type="text/javascript"></script>    
</head>

并且在您要添加此类变量的任何View中,只需执行以下操作:

@Section script_variables {

    <script type="text/javascript">

        var variableA = '@MyVarA',
            variableB = '@MyVarB',
            variableC = '@MyVarC';

    </script>

}

您加载脚本的所有其他文件都将包含此类代码......

答案 1 :(得分:1)

您可以在页面上声明一些js变量,然后使用.js文件中的那些变量

您可以调用.js文件中的函数并将数据作为参数发送

(请考虑创建一个对象并填充您的数据,而不是创建多个变量。)