MVC3, EntityFramework, Jquery Mobile…develop

Nessuno è contento quando vengono chiesti form di iscrizione o utilizzo che richiedono vari campi.
Uno dei lavori che ho fatto ultimamente, include l’inserimento di un indirizzo in modo naturale cioè come una persona lo scriverebbe sulla carta.

In questo modo l’utente può inserire l’indirizzo come lo scriverebbe sulla carta e ancora prima di finire, Google ci sta proponendo le soluzioni relative a ciò che abbiamo iniziato a scrivere.
Subito dopo, il codice va a spulciare i dati e inserire nel nostro DB tutti i campi correttamente, inclusa posizione GPS.
Subito prima di andare a vedere il codice, vi mostro la struttura della pagina. In questo modo potrete comprenderne meglio il funzionamento.

Vediamo il codice, partendo dall’azione CREATE del controller Anagrafica:

// GET: /Anagrafica/Create
        public ActionResult Create()
        {
            ViewBag.Famiglie = db.Famiglia.ToList();
            ViewBag.Settori = db.Settore.OrderBy(p => p.Nome);
            ViewBag.Referenza  = db.Referenza.ToList();
            return View();
        }
        //
        // POST: /Anagrafica/Create
        [HttpPost]
        public ActionResult Create( Anagrafica anagrafica )//FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here
                Ipad_MVC3.Models.User LoggedUser = (Ipad_MVC3.Models.User)Session[“LoggedUser”];
                //aggiungiamo i campi standard
                anagrafica.DataCreazione = DateTime.Now;
                anagrafica.IsProvvisorio = true;
                anagrafica.UserId = LoggedUser.UserId;
                anagrafica.CompanyId = LoggedUser.CompanyId;
                anagrafica.Deleted = false;
                // aggiungiamo i dati mancanti di cooridnate
                GAddress ind = new GAddress();
                ind.StandardizeAddress(anagrafica.Adress);
                if (ind.ResultRequest == “OK”)
                {
                    anagrafica.GStreet = ind.Street;
                    anagrafica.GCountryShort = ind.CountryShort;
                    anagrafica.GPostalCode = ind.PostalCode;
                    anagrafica.GRegion = ind.Region;
                }
                //salviamo le modifiche nel DB
                db.Anagrafica.AddObject(anagrafica);
                db.SaveChanges();
                Session[“AnagraficaSelId”] = anagrafica.AnagraficaId;
                Session[“AnagraficaSelNome”] = anagrafica.Nome;
                return RedirectToAction(“list”,”anagrafica”);
            }
            catch
            {
                return View(“”);
            }
        }

E successivamente il codice della pagina HTML+Javascript:

@model Ipad_MVC3.Models.Anagrafica
@{
    ViewBag.Title = “DATI CLIENTE”;
}

DATI CLIENTE

.

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

Ragione sociale:

                    @Html.EditorFor(model => model.Nome)
                    @Html.ValidationMessageFor(model => model.Nome)

Indirizzo (via Esempio 45, Città):

            @Html.EditorFor(model => model.Adress)
            @Html.ValidationMessageFor(model => model.Adress)

Cordinate Geografiche (automatiche)

                     @Html.EditorFor(model => model.GTown)
                     @Html.EditorFor(model => model.GCountry)
                     @Html.EditorFor(model => model.GGeoLat)
                     @Html.EditorFor(model => model.GGeoLong)

Telefono (centralino):

            @Html.EditorFor(model => model.Phone)
            @Html.ValidationMessageFor(model => model.Phone)

Email aziendale:

                    @Html.EditorFor(model => model.Email)
                    @Html.ValidationMessageFor(model => model.Email)

Inserisci la famiglia:

        @Html.DropDownList(“IdFam”, new SelectList(ViewBag.Famiglie, “FamigliaId”, “Nome”))

Inserisci il settore:

        @Html.DropDownList(“IdSett”, new SelectList(ViewBag.Settori, “SettoreId”, “Nome”))

Inserisci la fonte di acquisizione:

        @Html.DropDownList(“Referenza”, new SelectList(ViewBag.Referenza, “Id”, “Name”))
           
}