【问题标题】:Bind System.Data.Entity.Spatial.DbGeography to MVC Model将 System.Data.Entity.Spatial.DbGeography 绑定到 MVC 模型
【发布时间】:2019-11-05 10:31:57
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net-mvc razor dbgeography


    【解决方案1】:

    我的问题通过这些步骤解决了:

    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", "orderable": false },
          etc....
      

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多