【发布时间】:2016-08-04 18:36:46
【问题描述】:
今天我试图从我的 JS 部分代码中获取 JSON 并将其传递给 c# 方法。 当我将结果传递给当前方法时,我得到 null 的问题。
这是我的 JS 部分:
GMaps.on('click',
map.map,
function(event) {
markers.push(new Point(map.markers.length, event.latLng.lat(), event.latLng.lng()));
var index = map.markers.length;
var lat = event.latLng.lat();
var lng = event.latLng.lng();
map.addMarker({
lat: lat,
lng: lng,
title: 'Marker #' + index
});
console.log(JSON.stringify(markers));
});
function TestJSON() {
$.ajax({
url: "@Url.Action("ReturnJson","Home")",
type: "POST",
data: JSON.stringify(markers),
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
正如您从代码中看到的,在控制台中,我看到标记数组不是空的,并且在每次新单击后,我都会向数组添加一个值。 当我找到所有要保存的标记时,我为它做了一个按钮。
这是我的数据模型:
public class TripPoint
{
public string Name { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public class TripRoute
{
public List<TripPoint> route = new List<TripPoint>();
}
它看起来像我的 html 代码:
<form>
<button type="button" value="Save your route " onclick="TestJSON()"></button>
</form>
最后它看起来像应该获取 JSON 字符串的方法
[HttpPost]
public ActionResult ReturnJson(string json)
{
// **********************************
// PROBLEM HERE: json is null
// **********************************
TripRoute route = new JavaScriptSerializer().Deserialize<TripRoute>(json);
return new EmptyResult();
}
请帮忙找出为什么我得到一个空字符串。
更新。
这是我的路线配置
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ReturnJSON",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "ReturnJSON", id = UrlParameter.Optional }
);
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
}
【问题讨论】:
-
什么变量为空?什么时候?你是说
ReturnJson()中的route是空的还是空的?或者某个地方的一些字符串?JSON.stringify(markers)返回什么? -
请显示您在 RouteCollection 中的内容。我的意思是在 Global.asax.cs 中的 RegisterRoutes 方法中。
-
@EdPlunkett 哦,在 ReturnJson 方法中,参数“字符串”json 为空。当我按下一个按钮(据我所知)时,我应该在 JS 中调用函数 TestJson ,它将 json 值传递给 c sharp 方法。我错了吗? JSON.stringify(markers) 返回什么?我认为它以 json 格式返回数据。
-
@Antipod 哦,好的,我将其添加到问题中。请看一下。
-
ReturnJson是您的 Home 控制器的成员吗?
标签: javascript c# jquery json asp.net-mvc