我决定开始使用MVC 3,并且在尝试将我的一个网络应用程序重做为MVC3时遇到了这个问题。
我已经通过这种方式设置了项目:
public class Project
{
public int ProjectID { get; set; }
[Required(ErrorMessage="A name is required")]
public string Name { get; set; }
[DisplayName("Team")]
[Required(ErrorMessage="A team is required")]
public int TeamId { get; set; }
[DisplayName("Start Date")]
[Required(ErrorMessage="A Start Date is required")]
[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0:d}")]
public DateTime StartDate { get; set; }
[DisplayName("End Date")]
[Required(ErrorMessage="An End Date is required")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime EndDate { get; set; }
}
我的报名表是以这种方式写的日期:
<table>
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.StartDate)
</div>
</td>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.EndDate)
</div>
</td>
</tr>
<tr>
<td>
<div class="editor-field">
@Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker", id="txtStartDate" })
@Html.ValidationMessageFor(model => model.StartDate)
</div>
</td>
<td>
<div class="editor-field">
@Html.TextBoxFor(model => model.EndDate, new { @class = "datepicker", id = "txtEndDate" })
@Html.ValidationMessageFor(model => model.EndDate)
</div>
</td>
</tr>
</table>
我的问题是文本框现在显示01 / Jan / 0001 00:00:00。 首先:我怎样才能将日期格式化为shortdatestring? 我发现MVC2 solution建议在SharedFolder中创建一个EditorTemplates文件夹并使用EditorFor,但这似乎不适用于MVC3。它似乎也阻止了像TextBoxFor
那样容易地添加类其次,一旦修复,我就有了一个特殊的验证系统,我需要将其安装到位。我需要将结束日期设置为开始日期之后。我正在考虑使用我发现的http://www.datejs.com的javascript进行检查,但有没有办法直接在我的班级进行验证?
答案 0 :(得分:8)
对于您的编辑模板,请尝试此
@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })
来源:MVC 3 Editor Template with DateTime
jQuery DateTime比较
$('#txtbox').change(function() {
var date = $(this).val();
var arrDate = date.split("/");
var today = new Date();
useDate = new Date(arrDate[2], arrDate[1] -1, arrDate[0]);
if (useDate > today) {
alert('Please Enter the correctDate');
$(this).val('');
}
});
答案 1 :(得分:6)
有一种相当简单的方法。只需使用TextBox
而不是TextBoxFor
@Html.TextBox("ReturnDepartureDate",
Model.ReturnDepartureDate.ToString("dd/MM/yyyy"))
这样做的好处是可以添加所有不显眼的JavaScript元素等。还有更少的代码!
答案 2 :(得分:3)
看一下这个例子
@Html.TextBoxFor(s => s.dateofbirth, new { Value = @Model.dateofbirth.ToString("dd/MM/yyyy") })
答案 3 :(得分:2)
如果使用以下内容装饰viewmodel对象,则只会在文本框中看到日期部分。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime Date { get; set; }
然后在您的页面上,您只需执行以下操作
@Html.EditorFor(model => model.Date)
请注意,这是使用标准MVC3。我没有自定义日期编辑器模板。
此答案的所有功劳归于assign date format with data annotations
答案 4 :(得分:0)
// datimetime显示在datePicker是11/24/2011 12:00:00 AM
//您可以按空格拆分并将值设置为仅日期
脚本:
if ($("#StartDate").val() != '') {
var arrDate = $('#StartDate').val().split(" ");
$('#StartDate').val(arrDate[0]);
}
标记:
<div class="editor-field">
@Html.LabelFor(model => model.StartDate, "Start Date")
@Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" })
</div>
希望这会有所帮助..
答案 5 :(得分:0)
太晚了但可能对某人有帮助:
型号:
[Display(Name = "Date of birth")]
public DateTime? DOB{ get; set; }
HTML:
@Html.TextBoxFor(m => m.DOB, "{0:MM/dd/yyyy}",
new { @placeholder="MM/DD/YYYY", @au19tocomplete="off" })
JavaScript将日历添加到控件中:
$('#DOB').datepicker({changeMonth: true, changeYear: true,
minDate: '01/01/1900', maxDate: new Date});