在 ASP.NET MVC 中存储来自 3 DropDownListFor(日、月、年)的 DateTime

Store DateTime from 3 DropDownListFor (day, month, year) in ASP.NET MVC

我正在尝试使用 ASP.NET MVC 将 DateTime 对象存储到我的 SQL 数据库中。

@Html.DropDownListFor(model => model.ModifiedDate, Enumerable.Range(1, 31).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString()}), "-- Select Day --")
@Html.DropDownListFor(model => model.ModifiedDate, Enumerable.Range(1, 12).Select(i => new SelectListItem { Value = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i), Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) }), "-- Select Month --")
@Html.DropDownListFor(model => model.ModifiedDate, Enumerable.Range(2018, 5).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString()}), "-- Select Year --")
@Html.ValidationMessageFor(model => model.ModifiedDate, "", new { @class = "text-danger" })

我分别使用三 (3) 个 DropDownListFor 日、月和年。

有没有一种方法可以成功地将每个下拉列表中的所有 3 个输入存储为一个日期存储在我的 ModifiedDate 列中?

您可以创建一个包含日、月和年三个 属性 的模型,并在您的视图中设置它们的值。之后,您可以使用这些值创建 DateTime 属性 并将其存储在数据库中。

这里是DateModel.cs:

public class DateModel
{
    public int Year { get; set; }
    public int Month { get; set; }
    public int Day { get; set; }

    public DateTime ModifiedDate
    {
        get
        {
            return new DateTime(this.Year, this.Month, this.Day, 0, 0, 0);
        }
    }
}

我更改了您的视图代码以获取月数而不是月名,请参阅以下行:

@Html.DropDownListFor(model => model.Month, Enumerable.Range(1, 12).Select(i => new SelectListItem { Value = i.ToString(), Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) }), "-- Select Month --")

这是视图的代码:

@using (Html.BeginForm("Operate", "Test", FormMethod.Post))
{

    @Html.DropDownListFor(model => model.Day, Enumerable.Range(1, 31).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString() }), "-- Select Day --")
    @Html.DropDownListFor(model => model.Month, Enumerable.Range(1, 12).Select(i => new SelectListItem { Value = i.ToString(), Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) }), "-- Select Month --")
    @Html.DropDownListFor(model => model.Year, Enumerable.Range(2018, 5).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString() }), "-- Select Year --")

    <button type="submit">Operate</button>
}

您可以使用此代码。使用脚本,您可以验证客户的日期。

@Html.DropDownList("Day", Enumerable.Range(1, 31).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString() }), "-- Select Day --",new { @class="myDate"})
@Html.DropDownList("Month", Enumerable.Range(1, 12).Select(i => new SelectListItem { Value = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i), Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) }), "-- Select Month --", new { @class = "myDate" })
@Html.DropDownList("Year", Enumerable.Range(2018, 5).Select(i => new SelectListItem { Value = i.ToString(), Text = i.ToString() }), "-- Select Year --", new { @class = "myDate" })
<br />
@Html.TextBoxFor(model=>model.ModifiedDate, new { @readonly=true, style="background:#888;color:white;text-align:center;border:1px solid #ddd"})
@Html.ValidationMessageFor(model => model.ModifiedDate, "", new { @class = "text-danger" })

脚本

@section scripts{
    <script>
        var day = document.getElementById("Day");
        var month = document.getElementById("Month");
        var year = document.getElementById("Year");
        var ModifiedDate = document.getElementById("ModifiedDate");
        ModifiedDate.value = '0000-00-00';

       
        $('.myDate').on('change', function () {
            var d, m, y;

            if (day.selectedIndex > 0)
                d = day.options[day.selectedIndex].text;
            else
                d = "00";

            if (month.selectedIndex > 0)
                m = month.options[month.selectedIndex].text;
            else
                m = "00";

            if (year.selectedIndex > 0)
                y = year.options[year.selectedIndex].text;
            else
                y = "0000";


            var date = y + '-' + m + '-' + d;
            ModifiedDate.value = date;
        });
     </script>
}