我想为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
答案 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的隐藏字段