为DateTime创建一个编辑器模板,在MVC中为日,月,年三个输入字段

时间:2012-08-04 00:06:53

标签: c# asp.net-mvc asp.net-mvc-3 datetime datetimepicker

我想为DateTime创建一个编辑器模板?包含3个日期,月份,年份文本框的字段。目前我的EditorTemplates / Date.cshtml看起来像这样:

@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Day.ToString() : "",
                            new { @class = "day-box", title = "day", min = "1", max = "31", type = "number" })
@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Month.ToString() : "",
                            new { @class = "month-box", title = "month", min = "1", max = "12", type = "number" })
@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Year.ToString() : "",
                    new { @class = "year-box", title = "year", min = "1900", max = "2020", type = "number" })

明显的问题是(原样)id和name属性都被设置为相同的值。我需要在这些值上附加一些东西,而不要让它回到我的模型中。

我希望将_Day附加到id,并且.Day到Day输入的名称,同样的月份和年份将解决问题。但我看不出这样做的简单方法。

我打算使用Hidden输入作为实际值,然后每当我的三个(d / m / y)文本框中的一个值发生变化时,使用javascript更新隐藏字段的值。

当我传入string.Empty时,有没有办法获取MVC将要使用的名称和ID?使用ViewData.TemplateInfo.HtmlPrefix似乎没有给出完整的值。

有没有更好的方法来做我想要的?我无法想象我是第一个解决这个问题的人。

我知道那里有第三方选举日期。为了这个问题,我对他们不感兴趣。

谢谢, 382 4

2 个答案:

答案 0 :(得分:1)

如果DateTime的年月日是 可设置 ,您可以在DateTime.cshtml EditorTemplates上执行此操作

@model System.DateTime
@Html.TextBoxFor(model => model.Year) / @Html.TextBoxFor(model => model.Month) / @Html.TextBoxFor(model => model.Day)

以上是不可能的。 DateTime的年,月和日属性是只读的。

您可以做的只是创建一个单独的数据类型:

public struct DatePart
{
    public int Year { get; set; }
    public int Month { get; set; }
    public int Day { get; set; }

    public DateTime Date { get { return new DateTime(Year, Month, Day); } }
}

然后在您的日期EditorTemplates上执行此操作

@model TestV.Models.DatePart           
@Html.TextBoxFor(model => model.Year) / @Html.TextBoxFor(model => model.Month) / @Html.TextBoxFor(model => model.Day)

然后只需访问DatePart的Date(DateTime类型)属性

答案 1 :(得分:0)

您可以使用javascript在自定义模板中的三个字段中创建日期,并将其写入将绑定到您的Model.Date的隐藏字段