asp.net-mvc
Validation du modèle
Recherche…
Valider le modèle dans ActionResult
[HttpPost]
public ActionResult ContactUs(ContactUsModel contactObject)
{
// This line checks to see if the Model is Valid by verifying each Property in the Model meets the data validation rules
if(ModelState.IsValid)
{
}
return View(contactObject);
}
La classe de modèle
public class ContactUsModel
{
[Required]
public string Name { get; set; }
[Required]
[EmailAddress] // The value must be a valid email address
public string Email { get; set; }
[Required]
[StringLength(500)] // Maximum length of message is 500 characters
public string Message { get; set; }
}
Supprimer un objet de la validation
Disons que vous avez le modèle suivant:
public class foo
{
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string FullName { get; set; }
}
Mais vous souhaitez exclure FullName de la validation de modèle car vous utilisez également le modèle à un endroit où FullName n'est pas renseigné, vous pouvez le faire de la manière suivante:
ModelState.Remove("FullName");
Messages d'erreur personnalisés
Si vous souhaitez fournir des messages d'erreur personnalisés, procédez comme suit:
public class LoginViewModel
{
[Required(ErrorMessage = "Please specify an Email Address")]
[EmailAddress(ErrorMessage = "Please specify a valid Email Address")]
public string Email { get; set; }
[Required(ErrorMessage = "Type in your password")]
public string Password { get; set; }
}
Lorsque vos messages d'erreur se trouvent dans un ResourceFile (.resx), vous devez spécifier le ResourceType et le ResourceName:
public class LoginViewModel
{
[Required(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_RequiredEmail")]
[EmailAddress(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_ValidEmail")]
public string Email { get; set; }
[Required(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_RequiredPassword")]
public string Password { get; set; }
}
Création de messages d'erreur personnalisés dans le modèle et dans le contrôleur
Disons que vous avez la classe suivante:
public class PersonInfo
{
public int ID { get; set; }
[Display(Name = "First Name")]
[Required(ErrorMessage = "Please enter your first name!")]
public string FirstName{ get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage = "Please enter your last name!")]
public string LastName{ get; set; }
[Display(Name = "Age")]
[Required(ErrorMessage = "Please enter your Email Address!")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string EmailAddress { get; set; }
}
Ces messages d'erreur personnalisés apparaîtront si votre ModelState.IsValid
renvoie false.
Mais vous et moi savons qu’il ne peut y avoir qu’une seule adresse e-mail par personne, sinon vous enverrez des e-mails à des personnes potentiellement dangereuses et / ou à plusieurs personnes. C’est là que le contrôle entre en jeu. Supposons donc que les gens créent des comptes que vous pouvez enregistrer via l'action Créer.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID, FirstName, LastName, EmailAddress")] PersonInfo newPerson)
{
if(ModelState.IsValid) // this is where the custom error messages on your model will display if return false
{
if(database.People.Any(x => x.EmailAddress == newPerson.EmailAddress)) // checking if the email address that the new person is entering already exists.. if so show this error message
{
ModelState.AddModelError("EmailAddress", "This email address already exists! Please enter a new email address!");
return View(newPerson);
}
db.Person.Add(newPerson);
db.SaveChanges():
return RedirectToAction("Index");
}
return View(newPerson);
}
J'espère que cela pourra aider quelqu'un!
Validation du modèle dans JQuery.
Dans les cas où vous devez vous assurer de la validation du modèle à l'aide de Jquery, la fonction .valid () peut être utilisée.
Les champs de classe de modèle
[Required]
[Display(Name = "Number of Hospitals")]
public int Hospitals{ get; set; }
[Required]
[Display(Name = "Number of Beds")]
public int Beds { get; set; }
Le code de vue
@using (Html.BeginForm(new {id = "form1", @class = "form-horizontal" }))
{
<div class="divPanel">
<div class="row">
<div class="col-md-3">
@Html.LabelFor(m => m.Hospitals)
@Html.TextBoxFor(m => m.Hospitals, new { @class = "form-control", @type = "number"})
@Html.ValidationMessageFor(m => m.Hospitals)
</div>
<div class="col-md-3">
@Html.LabelFor(m => m.Beds)
@Html.TextBoxFor(m => m.Beds, new { @class = "form-control", @type = "number"})
@Html.ValidationMessageFor(m => m.Beds)
</div>
<div class="col-md-3">
<button type=button class="btn btn-primary" id="btnCalculateBeds"> Calculate Score</button>
</div>
</div>
</div>
}
Le script pour le contrôle de validation.
$('#btnCalculateBeds').on('click', function (evt) {
evt.preventDefault();
if ($('#form1').valid()) {
//Do Something.
}
}
Assurez-vous que les fichiers jquery.validate
et jquery.validate.unobtrusive
sont présents dans la solution.