Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC3 Razor: call javascript function from view

I am new in MVC3 Razor and want to show running time on a view (index.cshtml). I use a javascript function and put it in _Layout.cshtml so all other "home" views can use it (see following snippet)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>
        @ViewBag.Title
    </title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<script type="text/javascript">
    var uhr = new Date();
    var minuten;
    var stunden;
    var sekunden;
    var interval = 500;

    function datum(id) {
        uhr.setTime(uhr.getTime() + interval);
        window.setTimeout(function () { datum(id) }, interval);
        minuten = uhr.getMinutes();
        stunden = uhr.getHours();
        sekunden = uhr.getSeconds();
        if (minuten < 10) { minuten = '0' + minuten; }
        if (sekunden < 10) { sekunden = '0' + sekunden; }
        if (stunden < 10) { stunden = '0' + stunden; }
        document.getElementById(id).innerHTML = 'Jetzt ist: ' + stunden + ':' + minuten + ':' + sekunden;
    }
</script>

My questions: 1. how can I call this function (e.g. datum("uhr")) from index.cshtml? My try (see following) doesn't work:

@section SideBar {
    <p>
        <ul>
            <li><a href="Index.cshtml">Add Job</a></li>
            <li><a href="About.cshtml">About</a></li>
        </ul>
    </p>
    <p>
        The time is: datum("uhr");
    </p>
}
  1. Any other "better" way?
  2. Is it a good practice? I am not sure if it is correct putting javascript function in _Layout.cshtml.

Thx in advance.

like image 732
MagB Avatar asked Sep 16 '11 10:09

MagB


People also ask

How do you call a JavaScript function from a razor page?

Calling JavaScript Function from Razor View To include a JavaScript function, it is as simple as include a <script> tag and define the function inside the script block. Now, to call the function, add an onclick event on the employee name hyperlink and call the function.

Where do you put JavaScript on a razor page?

A JS file for the Index component is placed in the Pages folder ( Pages/Index. razor. js ) next to the Index component ( Pages/Index. razor ).


1 Answers

You should move the code from _Layout.cshtml into a seperate .js file and add a reference to it.

Also, you should change the index.cshtml code to be this:

@section SideBar {
<p>
    <ul>
        <li><a href="Index.cshtml">Add Job</a></li>
        <li><a href="About.cshtml">About</a></li>
    </ul>
</p>
<p>
    The time is: <span id="uhr"></span> 
</p>
<script type="text/javascript">datum("uhr");</script>
}

JS Fiddle Example

like image 58
Richard Dalton Avatar answered Sep 19 '22 15:09

Richard Dalton