2017-10-12 2 views
1

フォームのフィールドの1つが緯度/経度座標である送信ページがあります。私は「場所」と呼ばSystem.Data.Entity.Spatial.DbGeographyに保存し、このようなフィールドレンダリング:私のコントローラでSystem.Data.Entity.Spatial.DbGeography - 無パラメータコンストラクタなし

<div class="form-group"> 
      @Html.LabelFor(model => model.Location.Longitude, new { @class = "control-label col-md-2" }) 
      <div class="col-sm-3"> 
       @Html.TextBoxFor(model => model.Location.Longitude) 
       <img class="load-icon" src="~/Content/Loading.gif" /> 
       @Html.ValidationMessageFor(model => model.Location.Longitude) 
      </div> 

      @Html.LabelFor(model => model.Location.Latitude, new { @class = "control-label col-md-2" }) 
      <div class="col-sm-3"> 
       @Html.TextBoxFor(model => model.Location.Latitude) 
       <img class="load-icon" src="~/Content/Loading.gif" /> 
       @Html.ValidationMessageFor(model => model.Location.Latitude) 
      </div> 
     </div> 

を、私は反対側にフォームを受け取る:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "...Location...")] Report report) 

しかし、フォームの値をPOSTするたびに、例外がスローされ、オブジェクトの一部がコンストラクタのないパラメータを持たないことが示されます。バインド文字列から 'Location'を削除しても、他のすべてのプロパティを保持すると(サンプルでは省略されています)、正常に動作します。

これは、問題が「レポート」に挿入するDbGeographyを作成しようとしているが、インスタンス化できないために失敗していることを示しているようです。これは正しいです?もしそうなら、どうしたらこのエラーを回避できますか?私はむしろ私のデータベースでカスタムクラスを使用しないだろうが、私は他のオプションを考えることはできません。

+0

がDBGeographyデフォルトのコンストラクタを持ちますか? – Zinov

+0

引数がないpublicコンストラクタではありません –

+0

publicコンストラクタではない場合、あなたの期待 - これはあなたの答えです –

答えて

0

それはsqlQueryCommand このコードは100%を使用するのだ最良の方法は、働いていた:

var id = form["id"]; 
      var name = form["name"]; 
      var lat = form["Location.Latitude"]; 
      var lng = form["Location.Longitude"]; 
      db.Database.ExecuteSqlCommand("insert into [dbo].[schoolinfo] values ('" + id + "','" + name + "',geography::Point(" + lat + ", " + lng + ", 4326))"); 
+0

いいえ、それはまったく安全ではありません。 – JOSEFtw

+0

なぜですか? @JOSEFtw –

+0

私はdbGeographyをバインドする問題があるので、私はformcollectionとsqCommandを選択します –

関連する問題