我有一个包含Address
属性和Latitude
/Longitude
属性的模型。该模型填充在“创建”视图中,它们放置在大多数其他字段中。我根据输入的地址使用 Google Maps API 地理编码功能填充 Lat/Lng(让他们手动输入是没有意义的)。
我的大问题是应该在哪里完成。下面的代码有效,但我认为它很笨重。关于整合这种行为的更好方法的任何想法?它应该在控制器中吗?它应该是某些内部模型机制的一部分吗?
[HttpPost]
public ActionResult Create(Church church)
{
try
{
if (ModelState.IsValid)
{
string address = string.Format("{0},{1},{2} {3}",
church.Street + church.Street2, church.City,
church.Region, church.PostalCode);
JObject jsonResult = GoogleApiHelper.GetAddressGeocodeData(address);
//Handle some error states here...
if (jsonResult["results"].Count() == 1)
{
church.Latitude = jsonResult.SelectToken(
"results[0].geometry.location.lat").Value<double>();
church.Longitude = jsonResult.SelectToken(
"results[0].geometry.location.lng").Value<double>();
unitOfWork.ChurchRepository.Insert(church);
unitOfWork.Save();
return RedirectToAction("Index");
}
}
}
catch (DataException)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError("", "Unable to save changes.");
}
return View(church);
}