Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp net核心MVC:在javascript中将字符串列表作为参数传递_Javascript_C#_Arrays_List_Asp.net Core Mvc - Fatal编程技术网

Asp net核心MVC:在javascript中将字符串列表作为参数传递

Asp net核心MVC:在javascript中将字符串列表作为参数传递,javascript,c#,arrays,list,asp.net-core-mvc,Javascript,C#,Arrays,List,Asp.net Core Mvc,我正在使用谷歌api显示地图。在我的控制器中,我编写了以下c代码: 有可能是这样的吗?如何修复?以便您可以创建: 型号 public class MapsModel { public MapsModel(string[] maps) { Maps = maps; } public string[] Maps { get; private set; } } 控制器 public class MapsController : Controller

我正在使用谷歌api显示地图。在我的控制器中,我编写了以下c代码:

有可能是这样的吗?如何修复?

以便您可以创建:

型号

public class MapsModel
{
    public MapsModel(string[] maps)
    {
        Maps = maps;
    }

    public string[] Maps { get; private set; }
}
控制器

public class MapsController : Controller
{
   // GET: MapsModel
   public ActionResult Index()
   {
        var model = new MapsModel(
                new[]
                {
                    "Via Gavinana, 19, Roma",
                    "Val de Seine, 94600 Choisy le Roi",
                    "Street 21,Shuwaikh, Kuwait"
                } 
            );

      return View(model);
   }
}
查看

@model WebApplication1.Models.MapsModel


在这种情况下,您不需要ViewBag。

您没有遵循最佳方法,但可以使用此快速解决方案

控制器:=>

var sedi = new List<string>();
sedi.Add("Via Gavinana, 19, Roma");
sedi.Add("Val de Seine, 94600 Choisy le Roi");
sedi.Add("Street 21,Shuwaikh, Kuwait");
ViewBag.sediList = Json.Encode(sedi);

// No need to pass the viewbag in View param
return View();
var sedi=new List();
sedi.Add(“Via Gavinana,19岁,罗姆人”);
sedi.Add(“塞纳河谷,94600 Choisy le Roi”);
sedi.Add(“科威特Shuwaikh 21号街”);
ViewBag.sediList=Json.Encode(sedi);
//无需在View参数中传递viewbag
返回视图();
视图:=>

 var vb = @ViewBag.sediList;
 for(var i=0;i<vb.length;i++){
  GetLatLon (vb[i],function(){});
 }

 function GetLatLon (address, callback) {
    console.log(address);
    var location = new Array();
    geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == 'OK') {
            location = { lat: results[0].geometry.location.lat(), lng: results[0].geometry.location.lng() };
            callback(location);
        } else {
            alert('Geocode was not successful for the following reason: ' + status);
        }
    });
}

function addMarker (location, map) {
    var marker = new google.maps.Marker({
        position: location,
        map: map
    });
}

function initMap() {
    GetLatLon("@vb", function(location) {
        var map = new google.maps.Map(document.getElementById('map'), {
            zoom: 2,
            center: location
        });
        for (var i = 0; i < 3; i++) {
           addMarker(location, map);
        }
    });
  }
var vb=@ViewBag.sediList;

对于(var i=0;i,您必须使用如下内容: 在控制器中:

var sedi = new List<string>();
sedi.Add("Via Gavinana, 19, Roma");
sedi.Add("Val de Seine, 94600 Choisy le Roi");
sedi.Add("Street 21,Shuwaikh, Kuwait");
var sediString = JsonConvert.SerializeObject(sedi);
ViewBag.sediList = sediString;
return View();
您可以将数据放在数组中,并在每个函数中使用它:

$.each(data, function (i, item) {
//enter your code
}
Edit1: 对于javascript而非jquery,请使用:

var data = JSON.parse(document.getElementById(sediString).val());
而不是

var data = JSON.parse($("#sediString").val());
并对每个使用普通而不是$

for (var i = 0; i < data.length; i++) {
       addMarker(data[i], map);
    }

返回视图(ViewBag.sediList);-看起来有点奇怪。如果您使用的是ViewBag,并且视图中没有模型,则需要返回视图()。如果存在包含sediList的模型,则不需要视图包。只需通过modelGetLatLon(@vb),函数(location)传递数据即可-这里传递字符串,但不是数组。您需要将其分配给javascript变量-
var vn='@Html.Raw(Json.Encode(ViewBag.sediList));
这将是3个地址字符串的数组。但将代码更改为删除
ViewBag.sediList=sedi;
并使用
返回视图(sedi)在视图中添加
@model List
,然后使用
@Html.Raw(Json.Encode(model));
@FabioBit System.Web。Mvc@FabioBit,对于mvc核心,请参阅,您可以尝试使用一些第三方,如“@Newtonsoft.Json.JsonConvert.SerializeObject(Model.Maps)”,因为它返回字符串,但不返回HtmlString。应该有一种HtmlString(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Maps))…JsonHelper.Serialize也应该解决这个问题。它应该是Asp.net核心V5GetLaton(“@(新HtmlString(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Maps)),函数(location){它返回什么类型的字符串?我有[“Via Gavinana,19,Roma”,“Val de Seine,94600 Choisy le Roi”,“科威特Shuwaikh 21号街”]用于新的HtmlString(Newtonsoft.Json.JsonConvert.SerializeObject(模型‌​.它只是一个数组…var数组=[“Via Gavinana,19,Roma”,“Val de Seine,94600 Choisy le Roi”,“Street 21,Shuwaikh,Kuwait”];对于(数组中的var s){document.write(数组];}你能用“normal”重写它吗“请使用javascript代码而不是jquery?为什么在这里使用隐藏字段?这种方法不是应该在中使用的smth。”MVC@BorisSokolov因为我想在javascript中访问从控制器发送的数据。数据必须在某个地方才能在javascript中包含,但在此示例中,它可以访问Model或ViewBag。
<input type="hidden" id="sediString" name="sediString" value="@ViewBag.sediList">
var data = JSON.parse($("#sediString").val());
$.each(data, function (i, item) {
//enter your code
}
var data = JSON.parse(document.getElementById(sediString).val());
var data = JSON.parse($("#sediString").val());
for (var i = 0; i < data.length; i++) {
       addMarker(data[i], map);
    }
var data = JSON.parse(@ViewBag.sediList);