Вы не можете вводить значения, не говоря уже о проверке, свойство только для чтения .
Возможно, вы захотите проверить свои данные с помощью интерфейса IValidatableObject
.
Модель:
public class PersonFromSO : IValidatableObject
{
[DataType(DataType.Date)]
[DisplayName("Date of Birth:")]
[Required(ErrorMessage = "Birth Date is Required.")]
[DisplayFormat(ApplyFormatInEditMode = true,
DataFormatString = "{0;dd/MM/yyyy}",
NullDisplayText = "No Date of Birth is Selected.")]
public DateTime BirthDate { get; set; }
public int Age
{
get
{
DateTime now = DateTime.Today;
int age = now.Year - BirthDate.Year;
if (BirthDate > now.AddYears(-age)) age--; ;
return age;
}
}
public IEnumerable<ValidationResult> Validate(ValidationContext context)
{
if (Age < 1)
yield return new ValidationResult("You were born in the future.",
new[] { "Age" });
}
}
Вид:
@model PersonFromSO
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary()
@Html.LabelFor(m => m.BirthDate)
@Html.TextBoxFor(m => m.BirthDate)
<time>@Model.Age</time>
<input type="submit" />
}
Вот также контроллер, который я использовал, если нужно:
public class PersonFromSOController : Controller
{
public ActionResult Create()
{
return View(new PersonFromSO());
}
[HttpPost]
public ActionResult Create(PersonFromSO person)
{
return View(person);
}
}
Я бы отметил, что это немного запутанно, и вам, вероятно, лучше проверить BirthDate
напрямую.