Я пытаюсь установить свойство DateTime Birthday
для даты рождения, используя 3 dropwdowns для месяца, дня и года в MVC. На данный момент я не могу получить действительный ModelState. Кроме того, значения `model.Birthday. [Месяц, День или Год] не распознаются с отметки. Пожалуйста помоги.Установить свойство, объединяющее 3 выпадающих списка MVC
Моя разметка выглядит следующим образом:
@model StatisticalTracker.Models.RegisterModel
...
<li>
@Html.LabelFor(m => m.Birthday)
@Html.DropDownListFor(m => m.Birthday.Month, SelectListItemHelper.GetMonths(), "-- Month --", new { style = "display: inline-block" })/
@Html.DropDownListFor(m => m.Birthday.Day, SelectListItemHelper.GetDays(), "-- Day --", new { style = "display: inline-block" })/
@Html.DropDownListFor(m => m.Birthday.Year, SelectListItemHelper.GetYears(), "-- Year --", new { style = "display: inline-block" })
</li>
Мой ViewModel выглядит следующим образом:
public class RegisterModel
{
...
[DataType(DataType.Date)]
[Display(Name = "Birthday")]
public DateTime Birthday { get; set; }
}
Мой Conroller выглядит следующим образом:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (model.Birthday.Month == 0 || model.Birthday.Day == 0 && model.Birthday.Year == 0)
{
ModelState.AddModelError("Birthday", "Date of birth is required");
}
else
{
DateTime dt = new DateTime(model.Birthday.Year, model.Birthday.Month, model.Birthday.Day);
model.Birthday = dt;
}
if (ModelState.IsValid)
{
...
}
// If we got this far, something failed, redisplay form
return View(model);
}
Я пытался избежать необходимости сохранять 3 separtate поля БД и объединить их в один, но я попробую, если это самый простой способ – MTL323
Вам не нужно хранить эти поля отдельно в базе данных - модель может быть класс, который вы создаете именно для этого представления. конвертируйте его перед сохранением в базу данных. –
Я тоже собирался опубликовать этот ответ. У вас должны быть свойства, у которых есть сеттеры. Похоже, что 'DateTime.Day' является readonly и не может быть назначен. Этот ответ решает эту проблему. – Ric