簡體   English   中英

將 System.Data.Entity.Spatial.DbGeography 綁定到 MVC Model

[英]Bind System.Data.Entity.Spatial.DbGeography to MVC Model

我有一個帶有 DBGeometry 字段的 MVC model

    [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 時,我將以下內容寫入我的 Controller

   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 參數設置正確的值? 概念是擁有一個谷歌 map,從 javascript 獲取坐標(存儲在 Lat 和 Lng 字段中),然后正確設置我的 LocationGps。 我怎樣才能做到這一點?

我的問題通過以下步驟解決:

  1. 在我的 Model 中添加一個 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....

    我發布它以節省時間。 非常失望,沒有人再次回答我的問題......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM