我在我的MVC 5应用程序中使用Twitter Bootstrap Datepicker https://github.com/eternicode/bootstrap-datepicker。它连接到名为Selector
的视图中的文本框查看选择器
@model STAR.UI.ViewModels.ReportSelectorViewModel
<script>
$(document).ready(function () {
$('.datepicker').datepicker({
autoclose: true,
format: "dd/mm/yyyy",
daysOfWeekDisabled: "5,6"
});
});
</script>
@Html.TextBoxFor(m => m.StartDate, new { @class = "datepicker" })
当用户选择日期时,它会以英国日期格式dd / mm / yyyy显示在文本框中。这是对的。然后,用户可以点击提交按钮,该按钮在另一页面上显示数据。在该页面中有一个后退按钮,可以将用户返回到选择器视图,在那里他们可以选择另一个日期。但是,我也希望当用户点击后退按钮时,他们当前的日期选择也会传回文本框。
后退按钮
@Html.ActionLink("<<< Go Back", "Selector", "Reports", new { startDate = Model.StartDate }, new { @class = "btn btn-outline btn-primary" })
后退按钮将选定的StartDate传递回Controller中的Selector Action,然后我将此值分配给ViewModel,然后将ViewModel传递回Selector View。
选择器操作(在控制器中)
public ActionResult Selector(DateTime? startDate)
{
ReportSelectorViewModel model = new ReportSelectorViewModel();
model.StartDate = startDate;
return View(model);
}
ReportSelectorViewModel中的StartDate属性是DateTime?
类型问题是,当日期返回到文本框时,它的格式为mm / dd / yyyy,而不是我需要的英国格式,即dd / mm / yyyy。
我已尝试将此代码放在ReportSelectorViewModel中的StartDate属性上方,但它没有帮助
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? StartDate { get; set; }
有人可以帮忙吗?
感谢。
更新
My Html渲染了StartDate的代码
<div class="form-group">
<input class="datepicker" data-val="true" data-val-date="The field StartDate must be a date." data-val-required="Please select a Start Date" id="StartDate" name="StartDate" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="StartDate" data-valmsg-replace="true"></span>
</div>
答案 0 :(得分:0)
解决问题的最简单方法是将服务器全球文化设置为英国。 只需使用以下命令配置您的web.config文件:
<configuration>
<system.web>
<globalization uiCulture="en-GB" culture="en-GB" />
</system.web>
</configuration>
但此设置将应用于所有其他用户。最好的方法是使用用户文化设置,查看here并使用UTC格式的日期。
答案 1 :(得分:0)
民间
这解决了我的问题,将Html.TextBoxFor声明更改为此
@Html.TextBoxFor(model => model.StartDate, new { Value = Model.StartDate.HasValue ? Model.StartDate.Value.ToString("dd/MM/yyyy") : string.Empty, @class = "datepicker" })