0

我有一个带有 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 总是 Invalid 因为 LocationGps 为空。如何通过我的视图为我的 LocationGps 参数设置正确的值?概念是拥有一个谷歌地图,从 javascript 中获取坐标(存储在 Lat & Lng 字段中),然后正确设置我的 LocationGps。我怎样才能做到这一点?

4

1 回答 1

0

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

  1. 在我的模型中添加一个 JsonConverter (JsonConverter found 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", "orderable": false },
        etc....
    

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

于 2019-11-20T09:33:19.797 回答