7

If i have such javascript in my razor veiw:

@{
    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;
    }

So i want to put that javascript in separate file and reference that file to my view, and the problem is how may i pass values from razor to javascript when javascript in separate file?

2 Answers 2

8

Javascript are files without being parsed by the compiler, so, you have no chance...

What you can do however is to use a dynamic javascript, for example:

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

Have a route that says:

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

Create your controler and use a simple return View(); like

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

    // pass any Model you want

    return View();
}

In that view, just put your javascript with Razor syntax.


Or you can use variables and load them up make the use of RenderSection()

in your _Layout.cshtml file add a section in your <head> before any other javascript

<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>

and in any View that you want to add such variables, just do:

@Section script_variables {

    <script type="text/javascript">

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

    </script>

}

And all other files that you load the script will have such code...

Sign up to request clarification or add additional context in comments.

Comments

1

You might declare some js-variables on your page and then use those variables from the .js-file

You might call a function inside your .js-file and send your data as arguments

(Please consider creating one object and fill with your data instead of creating multiple variables.)

1 Comment

could you provide a bit more details?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.