【问题标题】:Returned DatePicker Value in Wrong Format返回的 DatePicker 值格式错误
【发布时间】:2016-02-05 19:26:32
【问题描述】:

我在我的 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; }

有人可以帮忙吗?

谢谢。

更新

我的 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>

【问题讨论】:

  • action Selector 是 post 还是 get 方法?

标签: asp.net-mvc twitter-bootstrap bootstrap-datepicker


【解决方案1】:

解决问题的最简单方法是将服务器全球文化设置为英国。 只需使用以下内容配置您的 web.config 文件:

<configuration>
    <system.web>
        <globalization uiCulture="en-GB" culture="en-GB" />
    </system.web>
</configuration>

但此设置将应用于所有其他用户。最好的方法是使用用户文化设置,查看 here 并使用 UTC 格式的日期。

【讨论】:

  • 感谢您的建议,但这并没有解决我的问题。
【解决方案2】:

乡亲

这解决了我的问题,将 Html.TextBoxFor 声明更改为此

@Html.TextBoxFor(model => model.StartDate, new { Value = Model.StartDate.HasValue ? Model.StartDate.Value.ToString("dd/MM/yyyy") : string.Empty, @class = "datepicker" })

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多