Address
プロパティおよびLatitude
/プロパティを含むモデルがありLongitude
ます。モデルは「作成」ビューに入力され、他のほとんどのフィールドに入力されます。入力した住所に基づいてGoogleMapsAPIジオコーディング機能を使用して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);
}