Итак, я пытаюсь создать DropDownList
, который будет редактировать различные переменные-члены класса DateTime
(которые у меня есть в моей модели), такие как День, Месяц и Год. Однако, когда элемент выбран в DropDownList
и нажата кнопка ввода Save
, данные не сохраняются. Все остальные отредактированные фрагменты данных будут изменены и сохранены, но поле DateTime
просто не обновится. Я бы предпочел не делать новую модель только для моих дат, но это можно сделать. Я могу создать SelectList
, я делаю это в HTML Helper
, как показано ниже:
namespace ErrorReport.Helpers
{
public class DateList
{
public static IEnumerable<SelectListItem> DayList
{
get
{
var days = new List<SelectListItem>();
for (int i = 1; i < 32; i++)
{
days.Add(new SelectListItem
{
Value = i.ToString(),
Text = i.ToString()
});
}
return days;
}
}
Очевидно, что есть еще два списка, один для Года и один для Месяца (я не беспокоюсь о часах, минутах или секундах), не показывал их, так как код идентичен. В моем View
код моего редактора выглядит следующим образом, и переменная, которую я хочу изменить, - CmpD
(из DateTime
класса):
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Edit Report: "@Model.Title"</legend>
@Html.HiddenFor(model => model.ReportId)
@Html.HiddenFor(model => model.SbmD)
@Html.HiddenFor(model => model.UserName)
@Html.HiddenFor(model => model.CmpD)
...irrelevant editor code...
<div class="editor-label">
@Html.LabelFor(model => model.CmpD, "Estimated Completion Date:")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CmpD.Month, DateList.MonthList)
@Html.DropDownListFor(model => model.CmpD.Day, DateList.DayList)
@Html.DropDownListFor(model => model.CmpD.Year, DateList.YearList)
//@Html.ValidationMessageFor(model => model.CmpD.Month)
//Above line was commented out
</div>
<p>
<input type="submit" value="Save"/>
</p>
</fieldset>
}
У меня уже была валидация для CmpD's
переменных-членов ранее (только те, которые я хотел изменить), закомментировал их, потому что они продолжали выдавать ошибки валидации для каждого возможного SelectList
выбора (отмеченного в приведенном выше коде). Я не помещал аргументы в функцию BeginForm
, потому что они вызывали проблемы сохранения при сохранении других данных. Я также добавил поле HiddenFor
для CmpD
(что является моим DateTime
), чтобы получить все для правильного сохранения, поскольку без этой строки кода контроллер возврата не распознал Model as valid
и не сохранил его. Я попытался добавить поле HiddenFor
для каждой переменной-члена в классе DateTime
, который я не использую, и все равно получаю ошибки проверки, если удаляю HiddenFor(model => model.CmpD)
, даже с другими Hidden Fields
присутствующими , Я также попытался составить список следующим образом:
public static IEnumerable<int> YearList
{
get
{
var years = new List<int>();
for (int i = 0; i < 4; i++)
{
years.Add(i);
}
return years.AsEnumerable();
}
}
Тем не менее, это предотвращает работу функции Html.DropDownListFor
, она, очевидно, должна использовать SelectList items
. Я заметил, что только strings
может быть SelectList items
, и что DateTime
переменные-члены ints
. Это вызывает проблему? Потому что я не вижу, где они преобразуются в ints
, и не могу понять, как бы я это сделал. Как мне отредактировать DateTime member variables
в DropDownList
?
Кроме того: это слишком много встроенного кода? Заранее спасибо!