【问题标题】:How to call JavaScript function in Razor如何在 Razor 中调用 JavaScript 函数
【发布时间】:2019-04-04 15:22:39
【问题描述】:

我创建了一个数组并将其传递给 ViewBag。

ViewBag.MarkerList = Utility.markerList; 

我有一个函数可以在 JavaScript 中的地图上添加标记:

function myFunction(item) {
    var marker = L.marker([item.lat, item.lng], { riseOnHover: true }).addTo(mymap);
    marker.bindPopup("I am a popup.<br>"+ item.lat + "," + item.lng);
}
var array = @ViewBag.MarkerList;

        array.foreach(myFunction);

如何在 ViewBag 中使用 foreach 并调用 JavaScript 函数?

【问题讨论】:

  • 你想在哪里调用这个函数?在页面加载或按钮/链接点击?
  • Razor 不执行 JavaScript。 Razor(可能)输出浏览器最终运行的 JavaScript。
  • @Pio 在页面加载中
  • @ARM4N8 当您在浏览器中单击“查看页面源代码”时,您的 JavaScript 是什么样的?这可能会给你一个线索。
  • 将 markerList 预格式化为字符串,并放入 ViewBag。我假设你有List&lt;string&gt;。所以 ac ode 看起来像这样:List&lt;string&gt; l = new List&lt;string&gt; { "Saab", "Volvo", "BMW" }; string strOutput = "["; l.ForEach(x =&gt; strOutput += String.Format("\"{0}\",", x)); strOutput = strOutput.Substring(0, strOutput.Length - 1); strOutput += "]"; ViewBag.MarkerList = strOutput;

标签: javascript c# razor model-view-controller


【解决方案1】:

您可以在方法中将 c# 数组转换为 json 用于 javascript 并在页面加载时调用方法。

function myFunction() {
    var markerList= @Html.Raw(Json.Serialize(ViewBag.MarkerList));
    for(item in markerList) {
        var marker = L.marker([item.lat, item.lng], { riseOnHover: true}).addTo(mymap);
        marker.bindPopup("I am a popup.<br>"+ item.lat + "," + item.lng);
    }
}

【讨论】:

  • 出现错误! json 不包含序列化的定义
  • 他可能是想说JsonConvert.SerializeObject(...。 Newtonsoft 需要@using
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2014-12-02
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多