Asp net核心MVC:在javascript中将字符串列表作为参数传递
我正在使用谷歌api显示地图。在我的控制器中,我编写了以下c代码: 有可能是这样的吗?如何修复?以便您可以创建: 型号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
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);