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?
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?