problem with create and edit methods of the grid

2 posts, 0 answers
  1. Stefano
    Stefano avatar
    13 posts
    Member since:
    Dec 2012

    Posted 14 Feb 2013 Link to this post

    Hi, I have a problem with a kendo grid, in particular with the create method.
    Let's suppose that we use that method for inserting a new data (which doesn't exist in the table). All works without problems.
    Now let's suppose that we use the create method again to insert a second new data, different from the first one and compatible with the validation rules set in the application.
    The problem is that I can't insert that data, because the validation rules prevent me to do that. Looking at the code in debug mode, I saw that I am passing to the create method a list of objects that contains the data I inserted before and the new element: it is so obvious that the validation rules, checking the first data, prevent me to insert new objects in the table. The same problem presents if I use the create method and then the update method.
    I noticed, also, that if I refresh the web page before inserting the second data this problem doesn't occur: all works well.

    Please, can you help me? I thought that I can proceed in two ways:
    - by passing to the create method only the last inserted data
    - by manually refreshing the grid everytime a new data is inserted or updated. How can I do this?

    You can find the create and update methods in the controller, if you want.


    THIS IS MY CODE

    AnagraficaRepository.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data;
    using System.Web;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using Sopra.Fmspa.BusinessLayer.ViewModels;
    using AutoMapper.Configuration;
    using AutoMapper.Mappers;
     
     
    /*   SINTASSI AUTOMAPPER
         AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
         Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
     
     
     
    namespace Sopra.Fmspa.BusinessLayer.DAL
    {
        public class AnagraficaRepository : IAnagraficaRepository, IDisposable
        {
            private ODLModelContainer context;
     
     
            /*   TO DO:
             *   - vedere AnagraficaViewModel.cs
             *   - sistemare il codice in modo tale che questo mapper funzioni senza l'opzione ignore per il campo manifestazione
                                                                                                                      */
     
     
            //public AnagraficaRepository(ODLModelContainer context)
            //{
            //    this.context = context;
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
            //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
            //}
     
     
            public AnagraficaRepository(ODLModelContainer context)
            {
                this.context = context;
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
                AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
                //AutoMapper.Mapper.CreateMap<Manifestazione, ManifestazioneViewModel>();
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
                AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
                //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel, Manifestazione>();
     
     
                AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                    .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                    //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
                AutoMapper.Mapper.CreateMap<AnagraficaViewModel, AnagraficaInBianco>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                    .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                    .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
            }
     
     
            //public AnagraficaRepository(ODLModelContainer context)
            //{
            //    this.context = context;
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public IEnumerable<AnagraficaInBianco> GetAnagrafica()
            {
                return context.odl_AnagraficaInBianco.ToList();
            }
     
            public IList<AnagraficaViewModel> GetAnagraficaList()
            {
                List<AnagraficaInBianco> anag = context.odl_AnagraficaInBianco.ToList();
                List<AnagraficaViewModel> anagview = AutoMapper.Mapper.Map<List<AnagraficaInBianco>,List<AnagraficaViewModel>>(anag);
                return anagview;
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public static IList<AnagraficaViewModel> All()
            //{
            //    IList<AnagraficaViewModel> result = (IList<AnagraficaViewModel>)HttpContext.Current.Session["Anagrafica"];
     
            //    if (result == null)
            //    {
            //        HttpContext.Current.Session["Anagrafica"] = result =
            //            (from anag in new ODLModelContainer().odl_Anagrafica
            //             select new AnagraficaViewModel
            //             {
            //                 Id = anag.Id,
            //                 AccountNumber = anag.AccountNumber,
            //                 RagioneSociale = anag.RagioneSociale,
            //                 TipologiaAnagraficaId = anag.TipologiaAnagraficaId,
            //                 Descrizione = anag.Descrizione,
            //                 ManifestazioneId = anag.ManifestazioneId,
            //                 PadiglioneId = anag.PadiglioneId,
            //                 Stand = anag.Stand,
            //                 FlagSolvenza = anag.FlagSolvenza,
            //                 FlagEstero = anag.FlagEstero,
     
            //                 TipologiaAnagrafica = anag.TipologiaAnagrafica,
            //                 Padiglione = anag.Padiglione
            //             }).ToList();
            //    }
     
            //    return result;
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public static AnagraficaViewModel One(Func<AnagraficaViewModel, bool> predicate)
            //{
            //    return All().Where(predicate).FirstOrDefault();
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public void Insert(AnagraficaViewModel anagview)
            //{
            //    if (anagview != null)
            //    {
            //        Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel, Anagrafica>(anagview);
            //        context.odl_Anagrafica.Add(anag);
            //    }
            //}
     
     
            public void Insert(AnagraficaViewModel anagview)
            {
                if (anagview != null)
                {
                    AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaInBianco>(anagview);
     
                    // valore forzato
                    anag.ManifestazioneId = anagview.ManifestazioneId;
     
                    context.odl_AnagraficaInBianco.Add(anag);
                }
            }
     
     
            //public void Insert(AnagraficaViewModel anagview)
            //{
            //    Anagrafica anag = new Anagrafica();
     
            //    anag.Id = anagview.Id;
            //    anag.AccountNumber = anagview.AccountNumber;
            //    anag.RagioneSociale = anagview.RagioneSociale;
            //    anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
            //    anag.Descrizione = anagview.Descrizione;
            //    anag.ManifestazioneId = anagview.ManifestazioneId;
            //    anag.PadiglioneId = anagview.PadiglioneId;
            //    anag.Stand = anagview.Stand;
            //    anag.FlagSolvenza = anagview.FlagSolvenza;
            //    anag.FlagEstero = anagview.FlagEstero;
     
            //    anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
            //    anag.Padiglione = anagview.Padiglione;
     
            //    context.odl_Anagrafica.Add(anag);
            //}
     
     
            //public static void Insert(AnagraficaViewModel anag)
            //{
            //    anag.Id = All().OrderByDescending(p => p.Id).First().Id + 1;
     
            //    All().Insert(0, anag);
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Update(AnagraficaViewModel anagview)
            {
                if (anagview != null)
                {
                    AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel,AnagraficaInBianco>(anagview);
                    context.odl_AnagraficaInBianco.Attach(anag);
                    context.Entry(anag).State = EntityState.Modified;
                }
            }
     
     
            //public void Update(AnagraficaViewModel anagview)
            //{
            //    Anagrafica anag = context.odl_Anagrafica.Find(anagview.Id);
     
            //    if (anag != null)
            //    {
            //        anag.Id = anagview.Id;
            //        anag.AccountNumber = anagview.AccountNumber;
            //        anag.RagioneSociale = anagview.RagioneSociale;
            //        anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
            //        anag.Descrizione = anagview.Descrizione;
            //        anag.ManifestazioneId = anagview.ManifestazioneId;
            //        anag.PadiglioneId = anagview.PadiglioneId;
            //        anag.Stand = anagview.Stand;
            //        anag.FlagSolvenza = anagview.FlagSolvenza;
            //        anag.FlagEstero = anagview.FlagEstero;
     
            //        anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
            //        anag.Padiglione = anagview.Padiglione;
     
            //        context.Entry(anag).State = EntityState.Modified;
            //    }
            //}
     
     
            //public static void Update(AnagraficaViewModel anag)
            //{
            //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
            //    if (target != null)
            //    {
            //        target.AccountNumber = anag.AccountNumber;
            //        target.RagioneSociale = anag.RagioneSociale;
            //        target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
            //        target.Descrizione = anag.Descrizione;
            //        target.ManifestazioneId = anag.ManifestazioneId;
            //        target.PadiglioneId = anag.PadiglioneId;
            //        target.Stand = anag.Stand;
            //        target.FlagSolvenza = anag.FlagSolvenza;
            //        target.FlagEstero = anag.FlagEstero;
     
            //        target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
            //        target.Padiglione = anag.Padiglione;
            //    }
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Delete(AnagraficaViewModel anagview)
            {
                AnagraficaInBianco anag = context.odl_AnagraficaInBianco.Find(anagview.Id);
                if (anag != null)
                {
                    context.odl_AnagraficaInBianco.Remove(anag);
                }
            }
     
            //public static void Delete(AnagraficaViewModel anag)
            //{
            //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
            //    if (target != null)
            //    {
            //        All().Remove(target);
            //    }
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Save()
            {
                context.SaveChanges();
            }
     
     
            private bool disposed = false;
     
            protected virtual void Dispose(bool disposing)
            {
                if (!this.disposed)
                {
                    if (disposing)
                    {
                        // dispose della classe context <--- dispose della classe ODLModelContainer
                        context.Dispose();
                    }
                }
                this.disposed = true;
            }
     
            public void Dispose()
            {
                // dispose della classe IDisposable ---> GC ---> liberazione della memoria
                Dispose(true);
                GC.SuppressFinalize(this);
            }
        }
    }
     
     
     
    /*   TO DO:
     *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
     *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                       */

    AnagraficaViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(AnagraficaViewModelValidator))]
        public class AnagraficaViewModel
        {
            //[Required(ErrorMessage = "Il campo Id è obbligatorio")]
            [Display(Name = "Id Anagrafica")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public int Id { get; set; }
     
            public string AccountNumber { get; set; }
     
            //[Required(ErrorMessage = "Il campo Ragione Sociale è obbligatorio")]
            [Display(Name = "Ragione Sociale")]
            //[DisplayFormat(NullDisplayText = "")]
            public string RagioneSociale { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Id Tipologia Anagrafica")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string TipologiaAnagraficaId { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Descrizione è obbligatorio")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Id Manifestazione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string ManifestazioneId { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Id Padiglione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string PadiglioneId { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Stand è obbligatorio")]
            [DisplayFormat(NullDisplayText = "")]
            public string Stand { get; set; }
     
            public bool FlagSolvenza { get; set; }
     
            public bool FlagEstero { get; set; }
     
     
            //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Tipologia Anagrafica")]
            //[DisplayFormat(NullDisplayText = "")]
            public virtual TipologiaAnagraficaViewModel TipologiaAnagrafica { get; set; }
     
            //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Padiglione")]
            //[DisplayFormat(NullDisplayText = "")]
            public virtual PadiglioneViewModel Padiglione { get; set; }
     
     
            /*   TO DO:
             *   - reintrodurre il riferimento virtual alla classe manifestazione? Oppure tenere solo l'id number?
             *   - impostare il viewmodel in modo tale che, per ogni record inserito, possa essere specificata una manifestazione
                                                                                                       */
     
            //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            //[Display(Name = "Manifestazione")]
            //public virtual PadiglioneViewModel ManifestazioneViewModel { get; set; }
        }
    }

    ManifestazioneViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(ManifestazioneViewModelValidator))]
        public class ManifestazioneViewModel
        {
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Id Manifestazione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string Id { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Descrizione Manifestazione")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { get; set; }
     
            [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
            public System.DateTime DataInizio { get; set; }
     
            [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
            public System.DateTime DataFine { get; set; }
        }
    }

    PadiglioneViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(PadiglioneViewModelValidator))]
        public class PadiglioneViewModel
        {
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Id Padiglione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string Id { get; set; }
     
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Descrizione Padiglione")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { get; set; }
        }
    }

    AnagraficaController.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Mvc;
    using Kendo.Mvc.Extensions;
    using Kendo.Mvc.UI;
    using Sopra.Fmspa.BusinessLayer.Models;
    using Sopra.Fmspa.BusinessLayer.DAL;
    using Sopra.Fmspa.BusinessLayer.ViewModels;
    using System.Data.Entity.Validation;
    using System.Diagnostics;
    using AutoMapper.Configuration;
    using AutoMapper.Mappers;
     
     
    /*   SINTASSI AUTOMAPPER
         AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
         Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
     
     
     
    namespace Sopra.Fmspa.BusinessLayer.Controllers
    {
     
        public class AnagraficaController : Controller
        {
            ODLModelContainer db = new ODLModelContainer();
            private IAnagraficaRepository anagraficaRepository;
     
     
            //public AnagraficaController()
            //{
            //    this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
            //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
            //}
     
     
            public AnagraficaController()
            {
                this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
                AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
                //AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
                AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
                //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
                AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                    .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                    //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
                AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaInBianco>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                    .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                    .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
     
                //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
            }
     
     
            public AnagraficaController(IAnagraficaRepository anagraficaRepository)
            {
                this.anagraficaRepository = anagraficaRepository;
            }
     
     
            public ActionResult Remote_Data()
            {
                return View("AjaxBinding");
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult AnagraficaRistoratoriEspositori()
            {
                IList<AnagraficaViewModel> anagview = anagraficaRepository.GetAnagraficaList();
     
                PopulateTipologiaAnagrafica();
                PopulatePadiglione();
     
                return View(anagview);
            }
     
     
            //public ActionResult AnagraficaRistoratoriEspositori()
            //{
            //    IEnumerable<Anagrafica> anag = anagraficaRepository.GetAnagrafica();
     
            //    PopulateTipologiaAnagrafica();
            //    PopulatePadiglione();
     
            //    return View(anag);
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
            {
                return Json(anagraficaRepository.GetAnagraficaList().ToDataSourceResult(request));
            }
     
     
            //public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
            //{
            //    return Json(AnagraficaRepository.All().ToDataSourceResult(request));
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_RagioneSocialeFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_TipologiaAnagraficaFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_PadiglioneFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_FlagEsteroFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.FlagEstero).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anagraficaRepository.Insert(anag);
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (anagrafiche != null && ModelState.IsValid)
                {
                    foreach (var anag in anagrafiche)
                    {
                        anag.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Id + 1;
                        anag.TipologiaAnagraficaId = anag.TipologiaAnagrafica.Id;
                        anag.PadiglioneId = anag.Padiglione.Id;
     
                        // valore forzato
                        if (anag.ManifestazioneId == null)
                        {
                            //anag.Manifestazione.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Manifestazione.Id;
                            anag.ManifestazioneId = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().ManifestazioneId;
                        }
                        //anag.ManifestazioneId = anag.Manifestazione.Id;
     
                        anagraficaRepository.Insert(anag);
                    }
                    anagraficaRepository.Save();
                }
                return Json(ModelState.ToDataSourceResult());
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    var results = new List<AnagraficaViewModel>();
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anagraficaRepository.Insert(anag);
            //            results.Add(anag);
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(results.ToDataSourceResult(request, ModelState));
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            private void PopulateTipologiaAnagrafica()
            {
                ViewData["TipologiaAnagrafiche"] = AutoMapper.Mapper.Map<IList<TipologiaAnagrafica>,IList<TipologiaAnagraficaViewModel>>(db.odl_TipologiaAnagrafica.ToList());
            }
     
            private void PopulatePadiglione()
            {
                ViewData["Padiglioni"] = AutoMapper.Mapper.Map<IList<Padiglione>,IList<PadiglioneViewModel>>(db.odl_vw_PADIGLIONI.ToList());
            }
     
     
            public ActionResult GetData()
            {
                return Json(anagraficaRepository.GetAnagraficaList(), JsonRequestBehavior.AllowGet);
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
            //            anag.Padiglione.Id = anag.PadiglioneId;
            //            anag.Manifestazione.Id = anag.ManifestazioneId;
     
            //            anagraficaRepository.Update(anag);
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (anagrafiche != null && ModelState.IsValid)
                {
                    foreach (var anag in anagrafiche)
                    {
                        anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
                        anag.Padiglione.Id = anag.PadiglioneId;
                        //anag.Manifestazione.Id = anag.ManifestazioneId;
     
                        anagraficaRepository.Update(anag);
                    }
                    anagraficaRepository.Save();
                }
                return Json(ModelState.ToDataSourceResult());
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
            //            if (target != null)
            //            {
            //                target = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaViewModel>(anag);
            //                anagraficaRepository.Update(target);
            //            }
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
            //            if (target != null)
            //            {
            //                target.AccountNumber = anag.AccountNumber;
            //                target.RagioneSociale = anag.RagioneSociale;
            //                target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
            //                target.Descrizione = anag.Descrizione;
            //                target.ManifestazioneId = anag.ManifestazioneId;
            //                target.PadiglioneId = anag.PadiglioneId;
            //                target.Stand = anag.Stand;
            //                target.FlagSolvenza = anag.FlagSolvenza;
            //                target.FlagEstero = anag.FlagEstero;
     
            //                target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
            //                target.Padiglione = anag.Padiglione;
     
            //                anagraficaRepository.Update(target);
            //            }
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_Delete([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (anagrafiche.Any())
                {
                    Anagrafiche_Destroy(anagrafiche);
                }
                else
                {
                    return HttpNotFound();
                }
     
                return Json(ModelState.ToDataSourceResult());
            }
     
            [HttpPost, ActionName("Anagrafiche_Delete")]
            public void Anagrafiche_Destroy([Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (ModelState.IsValid)
                {
                    foreach (var anag in anagrafiche)
                    {
                        anagraficaRepository.Delete(anag);
                    }
                }
                anagraficaRepository.Save();
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Destroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche.Any() && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anagraficaRepository.Delete(anag);
            //        }
            //    }
            //    anagraficaRepository.Save();
     
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
        }
     
    }
     
     
     
    /*   TO DO:
     *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
     *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                       */
  2. Stefano
    Stefano avatar
    13 posts
    Member since:
    Dec 2012

    Posted 14 Feb 2013 Link to this post

    Hi again, I've already resolved the problem: I changed the create method, so now it takes in input only the new data to insert.

    Now I post here my code for anyone that may need it. With this code one can generate a web page with:
    - a kendo grid with basic CRUD methods, where the insert/edit method is set as PopUp editing and where each column has a customized menu
    - sorting and filtering methods "inside of" the grid
    - data are read from a server database
    - two column fields are virtual attributes of a class --> the corresponding data are visualized with a dropdownlist
    - outside of the grid there are three kendo autocomplete textboxes and a checkbox that are used to filter the grid's content; the filtering rule of these objects is set to "and", and the filter can be used by pressing the "Search" button.


    THIS IS MY CODE

    IAnagraficaRepository.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using Sopra.Fmspa.BusinessLayer.ViewModels;
     
    namespace Sopra.Fmspa.BusinessLayer.DAL
    {
        public interface IAnagraficaRepository : IDisposable
        {
            IEnumerable<AnagraficaInBianco> GetAnagrafica();
            IList<AnagraficaViewModel> GetAnagraficaList();
     
            void Insert(AnagraficaViewModel anag);
            void Update(AnagraficaViewModel anag);
            void Delete(AnagraficaViewModel anag);
            void Save();
        }
    }

    AnagraficaRepository.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data;
    using System.Web;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using Sopra.Fmspa.BusinessLayer.ViewModels;
    using AutoMapper.Configuration;
    using AutoMapper.Mappers;
     
     
    /*   SINTASSI AUTOMAPPER
         AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
         Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
     
     
     
    namespace Sopra.Fmspa.BusinessLayer.DAL
    {
        public class AnagraficaRepository : IAnagraficaRepository, IDisposable
        {
            private ODLModelContainer context;
     
     
            /*   TO DO:
             *   - vedere AnagraficaViewModel.cs
             *   - sistemare il codice in modo tale che questo mapper funzioni senza l'opzione ignore per il campo manifestazione
                                                                                                                      */
     
     
            //public AnagraficaRepository(ODLModelContainer context)
            //{
            //    this.context = context;
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
            //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
            //}
     
     
            public AnagraficaRepository(ODLModelContainer context)
            {
                this.context = context;
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
                AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
                //AutoMapper.Mapper.CreateMap<Manifestazione, ManifestazioneViewModel>();
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
                AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
                //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel, Manifestazione>();
     
     
                AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                    .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                    //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
                AutoMapper.Mapper.CreateMap<AnagraficaViewModel, AnagraficaInBianco>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                    .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                    .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
            }
     
     
            //public AnagraficaRepository(ODLModelContainer context)
            //{
            //    this.context = context;
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public IEnumerable<AnagraficaInBianco> GetAnagrafica()
            {
                return context.odl_AnagraficaInBianco.ToList();
            }
     
            public IList<AnagraficaViewModel> GetAnagraficaList()
            {
                List<AnagraficaInBianco> anag = context.odl_AnagraficaInBianco.ToList();
                List<AnagraficaViewModel> anagview = AutoMapper.Mapper.Map<List<AnagraficaInBianco>,List<AnagraficaViewModel>>(anag);
                return anagview;
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public static IList<AnagraficaViewModel> All()
            //{
            //    IList<AnagraficaViewModel> result = (IList<AnagraficaViewModel>)HttpContext.Current.Session["Anagrafica"];
     
            //    if (result == null)
            //    {
            //        HttpContext.Current.Session["Anagrafica"] = result =
            //            (from anag in new ODLModelContainer().odl_Anagrafica
            //             select new AnagraficaViewModel
            //             {
            //                 Id = anag.Id,
            //                 AccountNumber = anag.AccountNumber,
            //                 RagioneSociale = anag.RagioneSociale,
            //                 TipologiaAnagraficaId = anag.TipologiaAnagraficaId,
            //                 Descrizione = anag.Descrizione,
            //                 ManifestazioneId = anag.ManifestazioneId,
            //                 PadiglioneId = anag.PadiglioneId,
            //                 Stand = anag.Stand,
            //                 FlagSolvenza = anag.FlagSolvenza,
            //                 FlagEstero = anag.FlagEstero,
     
            //                 TipologiaAnagrafica = anag.TipologiaAnagrafica,
            //                 Padiglione = anag.Padiglione
            //             }).ToList();
            //    }
     
            //    return result;
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public static AnagraficaViewModel One(Func<AnagraficaViewModel, bool> predicate)
            //{
            //    return All().Where(predicate).FirstOrDefault();
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //public void Insert(AnagraficaViewModel anagview)
            //{
            //    if (anagview != null)
            //    {
            //        Anagrafica anag = AutoMapper.Mapper.Map<AnagraficaViewModel, Anagrafica>(anagview);
            //        context.odl_Anagrafica.Add(anag);
            //    }
            //}
     
     
            public void Insert(AnagraficaViewModel anagview)
            {
                if (anagview != null)
                {
                    AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaInBianco>(anagview);
     
                    // valore forzato
                    anag.ManifestazioneId = anagview.ManifestazioneId;
     
                    context.odl_AnagraficaInBianco.Add(anag);
                }
            }
     
     
            //public void Insert(AnagraficaViewModel anagview)
            //{
            //    Anagrafica anag = new Anagrafica();
     
            //    anag.Id = anagview.Id;
            //    anag.AccountNumber = anagview.AccountNumber;
            //    anag.RagioneSociale = anagview.RagioneSociale;
            //    anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
            //    anag.Descrizione = anagview.Descrizione;
            //    anag.ManifestazioneId = anagview.ManifestazioneId;
            //    anag.PadiglioneId = anagview.PadiglioneId;
            //    anag.Stand = anagview.Stand;
            //    anag.FlagSolvenza = anagview.FlagSolvenza;
            //    anag.FlagEstero = anagview.FlagEstero;
     
            //    anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
            //    anag.Padiglione = anagview.Padiglione;
     
            //    context.odl_Anagrafica.Add(anag);
            //}
     
     
            //public static void Insert(AnagraficaViewModel anag)
            //{
            //    anag.Id = All().OrderByDescending(p => p.Id).First().Id + 1;
     
            //    All().Insert(0, anag);
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Update(AnagraficaViewModel anagview)
            {
                if (anagview != null)
                {
                    AnagraficaInBianco anag = AutoMapper.Mapper.Map<AnagraficaViewModel,AnagraficaInBianco>(anagview);
                    context.odl_AnagraficaInBianco.Attach(anag);
                    context.Entry(anag).State = EntityState.Modified;
                }
            }
     
     
            //public void Update(AnagraficaViewModel anagview)
            //{
            //    Anagrafica anag = context.odl_Anagrafica.Find(anagview.Id);
     
            //    if (anag != null)
            //    {
            //        anag.Id = anagview.Id;
            //        anag.AccountNumber = anagview.AccountNumber;
            //        anag.RagioneSociale = anagview.RagioneSociale;
            //        anag.TipologiaAnagraficaId = anagview.TipologiaAnagraficaId;
            //        anag.Descrizione = anagview.Descrizione;
            //        anag.ManifestazioneId = anagview.ManifestazioneId;
            //        anag.PadiglioneId = anagview.PadiglioneId;
            //        anag.Stand = anagview.Stand;
            //        anag.FlagSolvenza = anagview.FlagSolvenza;
            //        anag.FlagEstero = anagview.FlagEstero;
     
            //        anag.TipologiaAnagrafica = anagview.TipologiaAnagrafica;
            //        anag.Padiglione = anagview.Padiglione;
     
            //        context.Entry(anag).State = EntityState.Modified;
            //    }
            //}
     
     
            //public static void Update(AnagraficaViewModel anag)
            //{
            //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
            //    if (target != null)
            //    {
            //        target.AccountNumber = anag.AccountNumber;
            //        target.RagioneSociale = anag.RagioneSociale;
            //        target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
            //        target.Descrizione = anag.Descrizione;
            //        target.ManifestazioneId = anag.ManifestazioneId;
            //        target.PadiglioneId = anag.PadiglioneId;
            //        target.Stand = anag.Stand;
            //        target.FlagSolvenza = anag.FlagSolvenza;
            //        target.FlagEstero = anag.FlagEstero;
     
            //        target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
            //        target.Padiglione = anag.Padiglione;
            //    }
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Delete(AnagraficaViewModel anagview)
            {
                AnagraficaInBianco anag = context.odl_AnagraficaInBianco.Find(anagview.Id);
                if (anag != null)
                {
                    context.odl_AnagraficaInBianco.Remove(anag);
                }
            }
     
            //public static void Delete(AnagraficaViewModel anag)
            //{
            //    AnagraficaViewModel target = One(p => p.Id == anag.Id);
            //    if (target != null)
            //    {
            //        All().Remove(target);
            //    }
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public void Save()
            {
                context.SaveChanges();
            }
     
     
            private bool disposed = false;
     
            protected virtual void Dispose(bool disposing)
            {
                if (!this.disposed)
                {
                    if (disposing)
                    {
                        // dispose della classe context <--- dispose della classe ODLModelContainer
                        context.Dispose();
                    }
                }
                this.disposed = true;
            }
     
            public void Dispose()
            {
                // dispose della classe IDisposable ---> GC ---> liberazione della memoria
                Dispose(true);
                GC.SuppressFinalize(this);
            }
        }
    }
     
     
     
    /*   TO DO:
     *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
     *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                       */

    AnagraficaViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(AnagraficaViewModelValidator))]
        public class AnagraficaViewModel
        {
            //[Required(ErrorMessage = "Il campo Id è obbligatorio")]
            [Display(Name = "Id Anagrafica")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public int Id { getset; }
     
            public string AccountNumber { getset; }
     
            //[Required(ErrorMessage = "Il campo Ragione Sociale è obbligatorio")]
            [Display(Name = "Ragione Sociale")]
            //[DisplayFormat(NullDisplayText = "")]
            public string RagioneSociale { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Id Tipologia Anagrafica")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string TipologiaAnagraficaId { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Descrizione è obbligatorio")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Id Manifestazione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string ManifestazioneId { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Id Padiglione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string PadiglioneId { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Stand è obbligatorio")]
            [DisplayFormat(NullDisplayText = "")]
            public string Stand { getset; }
     
            public bool FlagSolvenza { getset; }
     
            public bool FlagEstero { getset; }
     
     
            //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Tipologia Anagrafica")]
            //[DisplayFormat(NullDisplayText = "")]
            public virtual TipologiaAnagraficaViewModel TipologiaAnagrafica { get;set; }
     
            //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Padiglione")]
            //[DisplayFormat(NullDisplayText = "")]
            public virtual PadiglioneViewModel Padiglione { getset; }
     
     
            /*   TO DO:
             *   - reintrodurre il riferimento virtual alla classe manifestazione? Oppure tenere solo l'id number?
             *   - impostare il viewmodel in modo tale che, per ogni record inserito, possa essere specificata una manifestazione
                                                                                                       */
     
            //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            //[Display(Name = "Manifestazione")]
            //public virtual PadiglioneViewModel ManifestazioneViewModel { get; set; }
        }
    }

    ManifestazioneViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(ManifestazioneViewModelValidator))]
        public class ManifestazioneViewModel
        {
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Id Manifestazione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string Id { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Manifestazione è obbligatorio")]
            [Display(Name = "Descrizione Manifestazione")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { getset; }
     
            [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
            public System.DateTime DataInizio { getset; }
     
            [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
            public System.DateTime DataFine { getset; }
        }
    }

    PadiglioneViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(PadiglioneViewModelValidator))]
        public class PadiglioneViewModel
        {
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Id Padiglione")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string Id { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Padiglione è obbligatorio")]
            [Display(Name = "Descrizione Padiglione")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { getset; }
        }
    }

    TipologiaAnagraficaViewModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Sopra.Fmspa.BusinessLayer.Models;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using Sopra.Fmspa.BusinessLayer.ViewModelsValidators;
     
    namespace Sopra.Fmspa.BusinessLayer.ViewModels
    {
        [FluentValidation.Attributes.Validator(typeof(TipologiaAnagraficaViewModelValidator))]
        public class TipologiaAnagraficaViewModel
        {
            //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Id Tipologia Anagrafica")]
            [DisplayFormat(NullDisplayText = "Id assente")]
            [ScaffoldColumn(false)]
            public string Id { getset; }
     
            //  //[Required(ErrorMessage = "Il campo Tipologia Anagrafica è obbligatorio")]
            [Display(Name = "Descrizione Tipologia Anagrafica")]
            [DisplayFormat(NullDisplayText = "")]
            public string Descrizione { getset; }
        }
    }

    AnagraficaController.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Mvc;
    using Kendo.Mvc.Extensions;
    using Kendo.Mvc.UI;
    using Sopra.Fmspa.BusinessLayer.Models;
    using Sopra.Fmspa.BusinessLayer.DAL;
    using Sopra.Fmspa.BusinessLayer.ViewModels;
    using System.Data.Entity.Validation;
    using System.Diagnostics;
    using AutoMapper.Configuration;
    using AutoMapper.Mappers;
     
     
    /*   SINTASSI AUTOMAPPER
         AutoMapper.Mapper.CreateMap<Sorgente,Destinatario>();
         Destinatario dest = AutoMapper.Mapper.Map<Sorgente,Destinatario>(sorg);   */
     
     
     
    namespace Sopra.Fmspa.BusinessLayer.Controllers
    {
     
        public class AnagraficaController : Controller
        {
            ODLModelContainer db = new ODLModelContainer();
            private IAnagraficaRepository anagraficaRepository;
     
     
            //public AnagraficaController()
            //{
            //    this.anagraficaRepository = new AnagraficaRepository(new ODLModelContainer());
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
            //    AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
            //    AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
            //    AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
            //    AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
            //    AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
            //    AutoMapper.Mapper.CreateMap<Anagrafica,AnagraficaViewModel>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    AutoMapper.Mapper.CreateMap<AnagraficaViewModel,Anagrafica>()
            //        .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
            //        .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione))
            //        .ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
            //    //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
            //}
     
     
            public AnagraficaController()
            {
                this.anagraficaRepository = new AnagraficaRepository(newODLModelContainer());
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagrafica,TipologiaAnagraficaViewModel>();
                AutoMapper.Mapper.CreateMap<Padiglione,PadiglioneViewModel>();
                //AutoMapper.Mapper.CreateMap<Manifestazione,ManifestazioneViewModel>();
     
                AutoMapper.Mapper.CreateMap<TipologiaAnagraficaViewModel,TipologiaAnagrafica>();
                AutoMapper.Mapper.CreateMap<PadiglioneViewModel,Padiglione>();
                //AutoMapper.Mapper.CreateMap<ManifestazioneViewModel,Manifestazione>();
     
     
                AutoMapper.Mapper.CreateMap<AnagraficaInBianco,AnagraficaViewModel>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.MapFrom(src => src.TipologiaAnagrafica))
                    .ForMember(dest => dest.Padiglione, opt => opt.MapFrom(src => src.Padiglione));
                    //.ForMember(dest => dest.Manifestazione, opt => opt.MapFrom(src => src.Manifestazione));
     
                AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaInBianco>()
                    .ForMember(dest => dest.TipologiaAnagrafica, opt => opt.Ignore())
                    .ForMember(dest => dest.Padiglione, opt => opt.Ignore())
                    .ForMember(dest => dest.Manifestazione, opt => opt.Ignore());
     
                //AutoMapper.Mapper.CreateMap<AnagraficaViewModel,AnagraficaViewModel>();
            }
     
     
            public AnagraficaController(IAnagraficaRepository anagraficaRepository)
            {
                this.anagraficaRepository = anagraficaRepository;
            }
     
     
            public ActionResult Remote_Data()
            {
                return View("AjaxBinding");
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult AnagraficaRistoratoriEspositori()
            {
                IList<AnagraficaViewModel> anagview = anagraficaRepository.GetAnagraficaList();
     
                PopulateTipologiaAnagrafica();
                PopulatePadiglione();
     
                return View(anagview);
            }
     
     
            //public ActionResult AnagraficaRistoratoriEspositori()
            //{
            //    IEnumerable<Anagrafica> anag = anagraficaRepository.GetAnagrafica();
     
            //    PopulateTipologiaAnagrafica();
            //    PopulatePadiglione();
     
            //    return View(anag);
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
            {
                returnJson(anagraficaRepository.GetAnagraficaList().ToDataSourceResult(request));
            }
     
     
            //public ActionResult Anagrafiche_Read([DataSourceRequest] DataSourceRequest request)
            //{
            //    return Json(AnagraficaRepository.All().ToDataSourceResult(request));
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_RagioneSocialeFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_TipologiaAnagraficaFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_PadiglioneFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult Anagrafiche_FlagEsteroFilter()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(e => e.FlagEstero).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, AnagraficaViewModel anagrafica)
            //{
            //    if (anagrafica != null && ModelState.IsValid)
            //    {
            //        anagraficaRepository.Insert(anagrafica);
            //        anagraficaRepository.Save();
            //    }
            //    return Json(new[] { anagrafica }.ToDataSourceResult(request,ModelState));
            //}
     
     
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, AnagraficaViewModel anagrafica)
            {
                if (anagrafica != null && ModelState.IsValid)
                {
                    anagrafica.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Id + 1;
                    anagrafica.TipologiaAnagraficaId = anagrafica.TipologiaAnagrafica.Id;
                    anagrafica.PadiglioneId = anagrafica.Padiglione.Id;
     
                    // valore forzato
                    if (anagrafica.ManifestazioneId == null)
                    {
                        //anagrafica.Manifestazione.Id = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().Manifestazione.Id;
                        anagrafica.ManifestazioneId = anagraficaRepository.GetAnagrafica().OrderByDescending(p => p.Id).First().ManifestazioneId;
                    }
                    //anagrafica.ManifestazioneId = anagrafica.Manifestazione.Id;
     
                    anagraficaRepository.Insert(anagrafica);
                    anagraficaRepository.Save();
                }
                return Json(new[] { anagrafica }.ToDataSourceResult(request,ModelState));
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    var results = new List<AnagraficaViewModel>();
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anagraficaRepository.Insert(anag);
            //            results.Add(anag);
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(results.ToDataSourceResult(request, ModelState));
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            private void PopulateTipologiaAnagrafica()
            {
                ViewData["TipologiaAnagrafiche"] = AutoMapper.Mapper.Map<IList<TipologiaAnagrafica>,IList<TipologiaAnagraficaViewModel>>(db.odl_TipologiaAnagrafica.ToList());
            }
     
            private void PopulatePadiglione()
            {
                ViewData["Padiglioni"] = AutoMapper.Mapper.Map<IList<Padiglione>,IList<PadiglioneViewModel>>(db.odl_vw_PADIGLIONI.ToList());
            }
     
     
            public ActionResult GetRagioneSociale()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.RagioneSociale).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult GetTipologiaAnagrafica()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.TipologiaAnagrafica).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
            public ActionResult GetPadiglione()
            {
                return Json(anagraficaRepository.GetAnagraficaList().Select(x => x.Padiglione).Distinct(), JsonRequestBehavior.AllowGet);
            }
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
            //            anag.Padiglione.Id = anag.PadiglioneId;
            //            anag.Manifestazione.Id = anag.ManifestazioneId;
     
            //            anagraficaRepository.Update(anag);
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix ="models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (anagrafiche != null && ModelState.IsValid)
                {
                    foreach (var anag in anagrafiche)
                    {
                        anag.TipologiaAnagrafica.Id = anag.TipologiaAnagraficaId;
                        anag.Padiglione.Id = anag.PadiglioneId;
                        //anag.Manifestazione.Id = anag.ManifestazioneId;
     
                        anagraficaRepository.Update(anag);
                    }
                    anagraficaRepository.Save();
                }
                return Json(ModelState.ToDataSourceResult());
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
            //            if (target != null)
            //            {
            //                target = AutoMapper.Mapper.Map<AnagraficaViewModel, AnagraficaViewModel>(anag);
            //                anagraficaRepository.Update(target);
            //            }
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche != null && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            var target = AnagraficaRepository.One(p => p.Id == anag.Id);
            //            if (target != null)
            //            {
            //                target.AccountNumber = anag.AccountNumber;
            //                target.RagioneSociale = anag.RagioneSociale;
            //                target.TipologiaAnagraficaId = anag.TipologiaAnagraficaId;
            //                target.Descrizione = anag.Descrizione;
            //                target.ManifestazioneId = anag.ManifestazioneId;
            //                target.PadiglioneId = anag.PadiglioneId;
            //                target.Stand = anag.Stand;
            //                target.FlagSolvenza = anag.FlagSolvenza;
            //                target.FlagEstero = anag.FlagEstero;
     
            //                target.TipologiaAnagrafica = anag.TipologiaAnagrafica;
            //                target.Padiglione = anag.Padiglione;
     
            //                anagraficaRepository.Update(target);
            //            }
            //        }
            //        anagraficaRepository.Save();
            //    }
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
            public ActionResult Anagrafiche_Delete([Bind(Prefix ="models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (anagrafiche.Any())
                {
                    Anagrafiche_Destroy(anagrafiche);
                }
                else
                {
                    return HttpNotFound();
                }
     
                return Json(ModelState.ToDataSourceResult());
            }
     
            [HttpPost, ActionName("Anagrafiche_Delete")]
            public void Anagrafiche_Destroy([Bind(Prefix ="models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            {
                if (ModelState.IsValid)
                {
                    foreach (var anag in anagrafiche)
                    {
                        anagraficaRepository.Delete(anag);
                    }
                }
                anagraficaRepository.Save();
            }
     
     
            //[AcceptVerbs(HttpVerbs.Post)]
            //public ActionResult Anagrafiche_Destroy([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<AnagraficaViewModel> anagrafiche)
            //{
            //    if (anagrafiche.Any() && ModelState.IsValid)
            //    {
            //        foreach (var anag in anagrafiche)
            //        {
            //            anagraficaRepository.Delete(anag);
            //        }
            //    }
            //    anagraficaRepository.Save();
     
            //    return Json(ModelState.ToDataSourceResult());
            //}
     
     
    //   ---------------------------------------------------------------------------------------------- //
     
     
        }
     
    }
     
     
     
    /*   TO DO:
     *   - aggiungere la possibilità di scegliere, per ogni record della grid, una manifestazione
     *   - collegamento tra la pagina manifestazioni e questa pagina (anagrafica in bianco)
                                                                                                                       */
    AnagraficaRistoratoriEspositori.aspx

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ViewsMasterPage.Master" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="phdContent" runat="server">
     
        <h2>Gestione Anagrafica Ristoratori/Organizzatori</h2>
     
     
     
    <div>
    <%= Html.Kendo().AutoComplete()
              .Name("RagioneSocialeSearch")
              .Filter("startswith")
              .Placeholder("Inserire Ragione Sociale...")
              .DataTextField("RagioneSociale")
              .DataSource(source =>
              {
                  source.Read(read =>
                  {
                      read.Action("GetRagioneSociale", "Anagrafica");
                  })
                  .ServerFiltering(false); //If true the DataSource will not filter the data on the client
              })
              .HtmlAttributes(new { style = "width:250px" })
        %>
     
    <%= Html.Kendo().AutoComplete()
              .Name("TipologiaAnagraficaSearch")
              .Filter("startswith")
              .Placeholder("Inserire Tipologia Anagrafica...")
              .DataTextField("Descrizione")
              .DataSource(source =>
              {
                  source.Read(read =>
                  {
                      read.Action("GetTipologiaAnagrafica", "Anagrafica");
                  })
                  .ServerFiltering(false); //If true the DataSource will not filter the data on the client
              })
              .HtmlAttributes(new { style = "width:250px" })
        %>
     
    <%= Html.Kendo().AutoComplete()
              .Name("PadiglioneSearch")
              .Filter("startswith")
              .Placeholder("Inserire Padiglione...")
              .DataTextField("Descrizione")
              .DataSource(source =>
              {
                  source.Read(read =>
                  {
                      read.Action("GetPadiglione", "Anagrafica");
                  })
                  .ServerFiltering(false); //If true the DataSource will not filter the data on the client
              })
              .HtmlAttributes(new { style = "width:250px" })
        %>
     
    <label>Flag Estero</label><input type "checkbox" name "FlagEsteroSearch" id ="FlagEsteroSearch" aria-labelledby "Flag Estero"/>
     
    <input type "button" name "Search" id "Search" contenteditable "true" aria-labelledby "Search" value "Search"/>
    </div>
     
     
     
    <%: Html.Kendo().Grid<Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel>()
        .Name("Grid")
        .HtmlAttributes(new { Style = "height:700px;" })
        .Columns(columns =>
        {
            columns.Bound(e => e.Id).Hidden();
            columns.Bound(e => e.RagioneSociale)
                    .Filterable(filterable => filterable.UI("RagioneSocialeFilter"))
                    .Width(150);
            columns.Bound(e => e.TipologiaAnagrafica)
                    .Filterable(filterable => filterable.UI("TipologiaAnagraficaFilter"))
                    .Width(150)
                    .ClientTemplate("# try {# #=TipologiaAnagrafica.Descrizione# #} catch (e) {}#");
            columns.Bound(e => e.Padiglione)
                    .Filterable(filterable => filterable.UI("PadiglioneFilter"))
                    .Width(200)
                    .ClientTemplate("# try {# #=Padiglione.Descrizione# #} catch (e) {}#");
            columns.Bound(p => p.Descrizione).Width(200);
            columns.Bound(e => e.FlagEstero)
                    .Filterable(filterable => filterable.UI("FlagEsteroFilter"))
                    .Width(100);
            //  Batch editing
            //columns.Command(command => command.Destroy()).Width(100);
            //  InLine editing or PopUp editing
            //columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
            columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200);
        })
        .Resizable(resizing => resizing.Columns(true))
        .Reorderable(reordering => reordering.Columns(true))
        .Filterable(filterable => filterable
            .Extra(false)
             .Operators(operators => operators
                .ForString(str => str.Clear()
                    .StartsWith("Inizia per")
                    .IsEqualTo("Equivale a")
                    .IsNotEqualTo("Differisce da")
                ))
            )
        //  Batch editing
        //.ToolBar(toolbar =>
        //        {
        //            toolbar.Create();
        //            toolbar.Save();
        //        })
        //  InLine editing
        //.ToolBar(toolbar => toolbar.Create())
        .ToolBar(toolbar => toolbar.Create())
        //  Batch editing
        //.Editable(editable => editable.Mode(GridEditMode.InCell))
        //  InLine editing
        //.Editable(editable => editable.Mode(GridEditMode.InLine))
        //  PopUp editing
        //.Editable(editable => editable.Mode(GridEditMode.PopUp))
        .Editable(editable => editable.Mode(GridEditMode.PopUp))
        .Pageable()
        .Sortable()
        .Scrollable()
        .ColumnMenu()
        .DataSource(dataSource => dataSource
            .Ajax()
            .ServerOperation(true)
            .PageSize(100)
            //.Batch(true)
            .Events(events => events.Error("error_handler"))
            .Model(model =>
                {
                    model.Id(p => p.Id);
                    model.Field(p => p.FlagEstero).DefaultValue(null);
                })
            .Read("Anagrafiche_Read", "Anagrafica")
            .Update("Anagrafiche_Update", "Anagrafica")
            .Create("Anagrafiche_Create", "Anagrafica")
            .Destroy("Anagrafiche_Delete", "Anagrafica")
        )
    %>
     
     
     
    <script>
        $("#Search").click(function () {
            $filter = new Array();
     
            $RagioneSociale = $("#RagioneSocialeSearch").val();
            $TipologiaAnagrafica = $("#TipologiaAnagraficaSearch").val();
            $Padiglione = $("PadiglioneSearch").val();
            $FlagEstero = $("#FlagEsteroSearch").is(':checked');
     
            if ($RagioneSociale) {
                $filter.push({ field: "RagioneSociale", operator: "contains", value: $RagioneSociale });
            }
     
            if ($TipologiaAnagrafica) {
                $filter.push({ field: "TipologiaAnagrafica.Descrizione", operator: "contains", value: $TipologiaAnagrafica });
            }
     
            if ($Padiglione) {
                $filter.push({ field: "Padiglione.Descrizione", operator: "contains", value: $Padiglione });
            }
     
            $filter.push({ field: "FlagEstero", operator: "eq", value: $FlagEstero });
     
     
            var Grid = $("#Grid").data("kendoGrid");
            Grid.dataSource.filter({
                logic: "and",
                filters: $filter
            });
     
        });
    </script>
     
     
     
    <script type="text/javascript">
     
        function error_handler(e) {
            if (e.errors) {
                var message = "Errori:\n";
                $.each(e.errors, function (key, value) {
                    if ('errors' in value) {
                        $.each(value.errors, function () {
                            message += this + "\n";
                        });
                    }
                });
     
                var grid = $("#Grid").data("kendoGrid");
                grid.one("dataBinding", function (e) {
                    e.preventDefault();   // cancel grid rebind if error occurs
                });
     
                alert(message);
            }
        }
     
     
        function RagioneSocialeFilter(element) {
            element.kendoDropDownList({
                dataSource: {
                    transport: {
                        read: "<%= Url.Action("Anagrafiche_RagioneSocialeFilter") %>"
                    }
                },
                optionLabel: "--Scegliere ragione sociale--"
            });
        }
     
        function TipologiaAnagraficaFilter(element) {
            element.kendoDropDownList({
                dataSource: {
                    transport: {
                        read: "<%= Url.Action("Anagrafiche_TipologiaAnagraficaFilter") %>"
                    }
                },
                optionLabel: "--Scegliere tipologia anagrafica--"
            });
        }
     
        function PadiglioneFilter(element) {
            element.kendoDropDownList({
                dataSource: {
                    transport: {
                        read: "<%= Url.Action("Anagrafiche_PadiglioneFilter") %>"
                    }
                },
                optionLabel: "--Scegliere padiglione--"
            });
        }
     
        function FlagEsteroFilter(element) {
            element.kendoDropDownList({
                dataSource: {
                    transport: {
                        read: "<%= Url.Action("Anagrafiche_FlagEsteroFilter") %>"
                    }
                },
                optionLabel: "--Espositore Estero?--"
            });
        }
     
    </script>
     
     
     
    </asp:Content>
     
    <asp:Content ID="Content2" ContentPlaceHolderID="phdHeadContent" runat="server">
    </asp:Content>


    PadiglioneViewModel.ascx
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
     
    <%:Html.Kendo().DropDownList()
            .Name("Padiglione")
            .DataValueField("Id")
            .DataTextField("Descrizione")
            .BindTo((System.Collections.IEnumerable)ViewData["Padiglioni"])
     %>

    TipologiaAnagraficaViewModel.ascx

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
     
    <%:Html.Kendo().DropDownList()
            .Name("TipologiaAnagrafica")
            .DataValueField("Id")
            .DataTextField("Descrizione")
            .BindTo((System.Collections.IEnumerable)ViewData["TipologiaAnagrafiche"])
     %>
    AnagraficaViewModel.ascx
    <%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of Sopra.Fmspa.BusinessLayer.ViewModels.AnagraficaViewModel)" %>
     
     
     
    <div class="editor-label">
        <%: Html.LabelFor(Function(model) model.RagioneSociale) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(Function(model) model.RagioneSociale) %>
        <%: Html.ValidationMessageFor(Function(model) model.RagioneSociale) %>
    </div>
     
     
    <div class="editor-label">
        <%: Html.LabelFor(Function(model) model.TipologiaAnagrafica)%>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(Function(model) model.TipologiaAnagrafica)%>
        <%: Html.ValidationMessageFor(Function(model) model.TipologiaAnagrafica)%>
    </div>
     
    <div class="editor-label">
        <%: Html.LabelFor(Function(model) model.Padiglione)%>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(Function(model) model.Padiglione)%>
        <%: Html.ValidationMessageFor(Function(model) model.Padiglione)%>
    </div>
     
     
    <div class="editor-label">
        <%: Html.LabelFor(Function(model) model.Descrizione) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(Function(model) model.Descrizione) %>
        <%: Html.ValidationMessageFor(Function(model) model.Descrizione) %>
    </div>
     
     
    <div class="editor-label">
        <%: Html.LabelFor(Function(model) model.FlagEstero) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(Function(model) model.FlagEstero) %>
        <%: Html.ValidationMessageFor(Function(model) model.FlagEstero) %>
    </div>

Back to Top