我有一个提交页面,其中一个表单的字段是纬度/经度坐标。我将它们存储在名为“Location”的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时都会抛出异常,说明某个对象(它无法告诉我哪个)没有参数更少的构造函数。当我从绑定字符串中删除“位置”但保留所有其他属性(在我的示例中省略)时,它可以正常工作。
这似乎表明问题在于它正在尝试创建一个DbGeography来输入'report',但失败因为它无法实例化它。它是否正确?如果是这样,我该如何避免这个错误?我宁愿不在我的数据库中使用自定义类,但我想不出任何其他选项。
答案 0 :(得分: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))");