KCS Nirav
KCS Nirav

Reputation: 53

Access ViewBag in JS file - Asp.net MVC

I have one Viewbag. I have fill that viewbag value from server side in Action result method. I need to access this Viewbag value in Js file. I have access this Viewbag in *.cshl page properly. Here below shown my sample code,

Var objMode = '@ViewBag.Mode'; //Written in *.cshtml page.

but i need to access this value like above syntax in *.js file.

Thanks, Nirav Parikh

Upvotes: 5

Views: 19064

Answers (2)

karaxuna
karaxuna

Reputation: 26930

You can't. You can write ViewBag value in hidden input and then read it from js file:

<input type="hidden" value="@ViewBag.Mode" id="mode" />

JS file:

var mode = document.getElementById('mode').value;

EDIT: Another option:

<script src="..." type="text/javascript" onload="InitMyScript('@ViewBag.Mode')"></script>

JS file:

function InitMyScript(mode){
   //other code here
}

Upvotes: 10

Knaģis
Knaģis

Reputation: 21485

You can't reference ViewBag or other context items in included script files because those are served as static files and not processed on the server (if you need, this can be worked around by serving a View with the content type of JavaScript).

You need to put the value in your view as JS variable:

<script type="text/javascript">
    // the object is only required if you want a nice syntax for multiple values.
    if (!window.ViewBag) window.ViewBag = {};
    window.ViewBag.Mode = @Html.Raw(Json.Encode(this.ViewBag.Mode));
</script>

Now you can reference it in your script file.

Upvotes: 4

Related Questions