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
AnagraficaViewModel.cs
ManifestazioneViewModel.cs
PadiglioneViewModel.cs
AnagraficaController.cs
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) */