0

次のモデルを検討してください。

public class ExportRequestsFilter {
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? StartDate { get; set; }

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? EndDate { get; set; }

    ...

それぞれのビューで:

<script type="text/javascript">
    $(document).ready(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' }); // this is the datepicker equivalent to dd/MM/yyyy
    });
</script>

...

<% using (Html.BeginForm(FormMethod.Post)) {%>
    ...
    <%: Html.TextBox("StartDate", Model.StartDate, new { @class = "datepicker" })%><br />
    <%: Html.TextBox("EndDate", Model.EndDate, new { @class = "datepicker" })%>

    <input type="submit" class="buttonLink" name="submitButton" value="<%: Html.Resource("Preview") %>" />

StartDate TextBoxのデータがUpdateModel()2012年2月4日で、StartDateを2012年4月2日ではなく2012年2月4日に設定する正当な理由はありますか?

4

2 に答える 2

1

2012年2月4日は、米国の英語文化の標準的な日時形式です。これは2012年2月4日を意味します。英国の英語文化の同じ日時形式は2012年4月2日を意味します。

現在のUIカルチャはen-UKではなくen-USに設定されているようです。で確認できますSystem.Globalization.CultureInfo.CurrentUICulture

于 2012-04-10T16:27:06.787 に答える
1

これは、入力の解析を行うコンピューターのカルチャ設定によって異なります。したがって、WebサーバーがDateTime米国文化に基づいて解析するように設定されMM/dd/yyyyている場合、Webページがとしてレンダリングするように設定されている場合でも、Webサーバーはそれを解析しますdd/MM/yyyy。解析を常に1つの形式にする場合は、カスタムバインダー内でDateTime.Parseを呼び出すときに、カルチャ情報を渡す必要があります。

編集:実際には、これをweb.configで設定して、アプリケーションのデフォルトのカルチャを使用できると思います。異なる文化設定で作業したことはありませんが、これを行う方法はわかりません。

MSDNには、MVCで動作するASP.NETアプリケーションのグローバル化に関する優れた記事があります。また、StackOverflowに関するこの記事では、web.configのMVCでそれを行う方法について説明します。そこで答えに従うと、探している形式でDateTimeが自動的に解析されます。

于 2012-04-10T16:28:46.883 に答える