Как выполнить расчет GeoCode, связанный с текстовыми полями Razor? - PullRequest
0 голосов
/ 17 февраля 2012

В ASP.NET MVC 3, использующей Razor View Engine, у меня есть несколько текстовых полей, которые объединяют адрес (например, улица, улица номер, почтовый индекс).

Я хочу вызвать веб-сервис Bing GeoCode после того, как у меня будет достаточно информации для вызова (например, длина улицы> 0, длина улицы nr> 0 и т. Д.).Было бы неплохо проверить на клиентском сайте, если во всех текстовых полях достаточно информации, а затем сделать обратную передачу (в контроллер).После обратной передачи результаты вызова веб-службы (широта / долгота) должны отображаться в представлении.

Как это можно сделать?

1 Ответ

0 голосов
/ 17 февраля 2012

Модель:

public class GeoCodeViewModel
{
    [StringLength(70, MinimumLength = 1)]
    public string Street { get; set; }

    [StringLength(10, MinimumLength = 1)]
    public string PostCode { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new GeoCodeViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(GeoCodeViewModel model)
    {
        if (!ModelState.IsValid)
        {
            // the model is not valid => redisplay the view so that 
            // the user can fix his errors
            return View(model);
        }

        // TODO: at this stage the model is valid => call the web service
        ...
    }
}

Вид:

@model GeoCodeViewModel

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.Street)
        @Html.EditorFor(x => x.Street)
        @Html.ValidationMessageFor(x => x.Street)
    </div>
    <div>
        @Html.LabelFor(x => x.PostCode)
        @Html.EditorFor(x => x.PostCode)
        @Html.ValidationMessageFor(x => x.PostCode)
    </div>
    <p><button type="submit">OK</button></p>
}
...