【问题标题】:Dynamic javascript in ASP.Net MVC 3.0+RazorASP.Net MVC 3.0+Razor 中的动态 javascript
【发布时间】:2011-11-27 13:49:26
【问题描述】:

我有一个必须在运行时生成的 javascript。脚本的文本是在控制器类中生成的:

private string mapString
{
    get
    {
       Locations loc = new Locations();
       string appPath = Request.ApplicationPath;
       loc.ReadXml(Path.Combine(Request.MapPath(appPath) + "\\App_Data", "Locations.xml"));
       StringBuilder sb = new StringBuilder();
       for (int i = 0; i < loc.Specfications.Count; i++)
       {
          sb.Append("var myLatLng" + i.ToString() + "= new google.maps.LatLng(" + loc.Specfications[i].Y.ToString() + "," +
          loc.Specfications[i].X.ToString() + ");");
          sb.Append(" var beachMarker" + i.ToString() + " = new google.maps.Marker({position: myLatLng" + i.ToString() + ",map: map,icon: image,title:'" + loc.Specfications[i].Title + "'});"); 

....

...

...

      ViewData["MapString"] = mapString;

当我在脚本标签中使用它时:

 <script type="text/javascript">

              function initialize() {
                 @Server.HtmlDecode(ViewData["MapString"].ToString())

              }

</script>

它不会返回一个真正的文本,它会重新运行如下内容:

contentString0 = '

【问题讨论】:

  • 首先你为什么需要在你的控制器中生成你的javascript?据我所知,您正在将经度和纬度传递给 Goole Maps API。为什么不创建一个只将您需要的数据作为 JSON 对象返回的控制器操作?
  • 我该怎么做?你能举个例子吗?是的,我想在谷歌地图上动态标记。

标签: asp.net-mvc-3 razor


【解决方案1】:

您可能希望这样做,我认为这将比在控制器中生成代码更灵活:

控制器动作:

    public JsonResult GetCoords()
    {
        // your code here - im putting a generic result you may 
        // need to put some logic here to retrieve your location / locations 

        var result = new { lon = "51.0000", lat = "23.0000" };
        return Json(result, JsonRequestBehavior.AllowGet);

    }

在你看来添加:

    <script type="text/javascript">
        $(document).ready(function () {

            $.getJSON('/YourController/GetCoords', function (jsonData) {

                var lon = jsonData.lon;
                var lat = jsonData.lat;

                yourGoogleMapFunction(lon, lat);

            });
        });
    </script>

【讨论】:

  • 示例中的 getJSON 有效。我从 JQuery 站点下载了 JQery1.7.js,但示例不起作用。
  • 在我的控制器类中:[HttpPost] public JsonResult GetCoords() { // 你的代码在这里 - 我把一个通用的结果你可能 // 需要在这里放一些逻辑来检索你的位置/位置 var结果 = 新 { lon = "51.0000", lat = "23.0000" };返回 Json(结果,JsonRequestBehavior.AllowGet); }
  • 在我的 aspx 文件中: 但警报功能没有触发。
  • $.getJSON('HomeController/GetCoords',null, function (jsonData) 我很确定这不是我在示例中编写的方式。同时检查您的控制器路径是否正确,我认为您需要在您的相对地址前面加上“/”。对于未来:在 Chrome 或 Firefox 中使用 Firebug 运行代码并启动开发人员工具。在您单击站点时检查“网络”选项卡以调试和跟踪所有错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多