I have a model in mvc as below
public class person
{
[Required(ErrorMessage = "Please enter First Name.")]
public string first_name {get;set;}
[Required(ErrorMessage = "Please enter last Name")]
public string last_name {get;set;}
[Required(ErrorMessage = "Please enter |DOB")]
public DateTime DOB {get;set;}
}
post method
[HttpPost]
public ActionResult save_person(person per)
{
if(per.first_name == null || per.first_name =="")
per.first_name ="demo_first";
if(per.lastname == null || per.lastname =="")
per.last_name ="demo_last";
if (ModelState.IsValid) //fails even assignment is done above
{
}
}
so using if condition I make sure the model elements will contain atleast some value but even after that ModelState.IsValid is failing and returning back to the view saying first_name and last_name is requried
how can we achieve this logic??
It is quite unclear why are the first_name
and last_name
properties on your model decorated with the Required attribute if they clearly are not required.
This being said, if you want to update the value of some model property in your controller you might need to ensure that you also update it in the ModelState
:
if (per.first_name == null || per.first_name == "")
{
per.first_name ="demo_first";
ModelState.Remove("first_name");
ModelState.SetModelValue("first_name", new ValueProviderResult(per.first_name, per.first_name, CultureInfo.InvariantCulture));
}
if (per.last_name == null || per.lastname == "")
{
per.last_name ="demo_last";
ModelState.Remove("last_name");
ModelState.SetModelValue("last_name", new ValueProviderResult(per.last_name, per.last_name, CultureInfo.InvariantCulture));
}
if (ModelState.IsValid)
{
...
}