将System.Data.Entity.Spatial.DbGeography绑定到MVC模型

我有一个带有DBGeometry字段的MVC模型

    [Required(AllowEmptyStrings = false,ErrorMessage = "Location is required")]
    public System.Data.Entity.Spatial.dbgeography LocationGps { get; set; } // LocationGPS

在我的视图内部,我具有此隐藏值。

 @Html.HiddenFor(model => model.LocationGps)
 @Html.HiddenFor(model => model.Lat)
 @Html.HiddenFor(model => model.Lng)

编辑模型时,我将以下内容写入控制器

   model.LocationGps = Utils.Geography.ConvertLatLonTodbgeography(model.Lng,model.Lat);
  if (ModelState.IsValid)
  {}

ConvertLatLonTodbgeography代码:

   public static dbgeography ConvertLatLonTodbgeography(double longitude,double latitude)
    {
        var point = string.Format("POINT({1} {0})",latitude,longitude);
        return dbgeography.FromText(point);
    }

但是ModelState始终无效,因为LocationGps为null。如何通过视图为我的LocationGps参数正确设置值? 的概念是要有一张谷歌地图,从javascript(存储在纬度和经度字段中)获取坐标,然后正确设置我的LocationGps。我该怎么办?

wsk520520 回答:将System.Data.Entity.Spatial.DbGeography绑定到MVC模型

我的问题通过以下步骤解决了:

  1. 在我的模型内添加一个JSonConverter(找到JsonConverter here

    [JsonConverter(typeof(DbGeographyConverter))]
    [Required]
     public System.Data.Entity.Spatial.DbGeography LocationGps { get; set; }
    
  2. 序列化我的数据表(服务器端)

    string json = JsonConvert.SerializeObject(dataTableData);
    return Json(json,JsonRequestBehavior.AllowGet);
    
  3. 之所以称为JSON.parse(客户端),是因为我的dataSrc具有除结果列表以外的其他值

       "ajax":
                {
                    "url": "@string.Format("{0}",Url.Content("~/Location/AjaxGetLocations"))","type": "POST","dataSrc": function (data) {
                        var json = JSON.parse(data);
                        return json["data"];
                    }
                },"columns": [
                { "data": "LocationID","orderable": false,"visible": false },{ "data": "LocationInternalCode","orderable": false },{ "data": "LocationName",etc....
    

    我发布它以节省时间。非常失望,没人能再次回答我的问题...

本文链接:https://www.f2er.com/3160416.html

大家都在问