PDA

View Full Version : [ASP.NET MVC]Consigli su Remote Validation


Foofighter
27-06-2013, 10:52
Buongiorno.
Sto sviluppando un progetto con Asp.net MVC 4.
Ho creato, per verificare che l'id di un elemento non sia già stato inserito, un ValidationController con il seguente codice:
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public class ValidationController : Controller
{
private RifiutiEntities db = new RifiutiEntities();

//Codice per la validazione del campo ID_FUSTO, per verificare se è già stato inserito.
public JsonResult IsIDFUSTOAvailable(string ID_FUSTO)
{
if (!PresenzaIDFUSTO(ID_FUSTO))
return Json(true, JsonRequestBehavior.AllowGet);
else
{
return Json("Attenzione, l'identificativo " + ID_FUSTO + " è già stato inserito.", JsonRequestBehavior.AllowGet);
}
}


private bool PresenzaIDFUSTO(string ID_FUSTO)
{
var fusto = db.TBL_NUOVO_FUSTO.FirstOrDefault(f => f.ID_FUSTO == ID_FUSTO);
return (fusto != null);
}
Tra le proprietà della classe interessata ho inserito questo:
[Required]
[Display(Name = "ID_FUSTO")]
[Remote("IsIDFUSTOAvailable", "Validation")]//Codice per validazione ID già presente
public string ID_FUSTO { get; set; }

La validazione funziona, nel senso che appare correttamente il messaggio che mi avvisa se l'id risulta già inserito, però quando vado a cliccare sul bottone di inserimento/creazione, tenta comunque di inserire i dati sul database, con conseguente pagina di errore del server per tentativo di inserimento chiave duplicata.
In debug, con il seguente codice:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TBL_NUOVO_FUSTO tbl_nuovo_fusto)
{

if (ModelState.IsValid)
{
db.TBL_NUOVO_FUSTO.Add(tbl_nuovo_fusto);
db.SaveChanges();
return RedirectToAction("Index");
}
ho notato che, anche se appare correttamente il messaggio di validazione "id già inserito", "ModelState.IsValid" risulta sempre "True", a differenza degli altri tipi di validazione per le altre proprietà quali "[Required]","[StringLength(50)]", ecc., dove se i campi non rispettano i valori di validazione, il "ModelState.IsValid" risulta "False" ed evita così il "db.SaveChanges()".

Qualche consiglio?