在MVC中为DateTime创建一个编辑器模板,其中包含天、月、年三个输入字段

本文关键字:包含天 字段 输入 三个 创建 DateTime 中为 MVC 一个 编辑器 | 更新日期: 2024-09-23 22:47:37

我想为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属性都被设置为相同的值。我需要在这些值上添加一些东西,并且永远不要将其重新添加到我的模型中。

我希望在id中添加_Day,在Day输入的名称中添加.Day,同样在月份和年份中也添加.Day可以解决这个问题。但我想不出一个简单的方法来做到这一点。

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

所以,当我传入字符串时,有没有一种方法可以获得MVC将要使用的名称和id。空的使用ViewData.TemplateInfo.HtmlPrefix似乎没有给出完整的值。

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

我知道外面有第三方的约会对象。为了这个问题,我对它们不感兴趣。

谢谢,~S

在MVC中为DateTime创建一个编辑器模板,其中包含天、月、年三个输入字段

如果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); } }
}

然后在你的日期编辑器模板上做这件事

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

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

您可以使用javascript从自定义模板中的三个字段中形成日期,并将其写入将绑定到模型的隐藏字段中。日期