繁体   English   中英

如何在.net MVC5控制器中编写JavaScript

[英]How to write JavaScript in .net MVC5 controller

我是MVC的新手,所以请原谅我的无知。 我所拥有的是一个Google Maps脚本,它将根据用户页面动态更改标记位置。 在Web表单中,我可以用下面的代码编写脚本,如下所示:

protected void maps_wrapper_Init(object sender, EventArgs e)
    {

        maps_wrapper.Text = "<script> " +
        "function initialize() {" +
          "var mapOptions = {" +
            "zoom: 12," +
            "center: new google.maps.LatLng(-25.363882, 131.044922)," +
            "mapTypeId: google.maps.MapTypeId.SATELLITE" +
          "};" +

          "var map = new google.maps.Map(document.getElementById('map-canvas')," +
             " mapOptions);" +

          "var image = 'img/mapMarker.png';" +
          "var marker = new google.maps.Marker({" +
            "position: map.getCenter()," +
            "map: map," +
            "title: 'Click to zoom'," +
            "icon: image" +
          "}); " +

          "google.maps.event.addListener(map, 'center_changed', function() {" +
            "window.setTimeout(function() {" +
              "map.panTo(marker.getPosition());" +
            "}, 3000);" +
          "});" +

          "google.maps.event.addListener(marker, 'click', function() {" +
            "map.setZoom(18);" +
            "map.setCenter(marker.getPosition());" +
          "});" +
        "}" +

        "google.maps.event.addDomListener(window, 'load', initialize);" +
        "</script> ";


    }

并用标签称呼它

<asp:Label runat="server" ID="map_wrapper" OnInit="search_wrapper_Init" />

您将如何在MVC中做到这一点?

还是我朝着完全错误的方向前进?

您无需将脚本放入控制器中。 JavaScript是客户端代码,您将其放在视图中。

<script type="text/javascript">
    function initialize() {
      var mapOptions = {
        zoom: 12,
        center: new google.maps.LatLng(-25.363882, 131.044922),
        mapTypeId: google.maps.MapTypeId.SATELLITE
      };

    // etc.

</script>

或在视图引用的自己的.js文件中,或包含在视图使用的脚本包中。

(它实际上不应该在Web窗体的代码隐藏中,它应该在页面上。或者在页面引用的.js文件中。)

实际上,当您要创建动态Javascript并将其发送到客户端时,这是一个有效的问题。 例如,当您希望将特定于ViewModel的数据传递给客户端时,无需为特定于ViewModel的数据编辑每个视图。

有几种方法可以做到这一点。 这是最简单的方法。 使用ViewBag的dynamic属性,然后在服务器端添加您的JavaScript,然后在客户端(或您的视图文件)中检索它。 以下是代码:

在您的Controller方法中,设置:

Viewbag.clientside_js="<script type=\"text/javascript\"> Your Javascript here </script>";

在您的View文件上,插入以下行:

@Html.Raw(ViewBag.clientside_js)

而已。 当然,您也可以通过使用JavaScriptSerializer().Serialize()实现相同的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM