18

MVC 4 を使用していますが、Datetime カルチャ情報にバグがあるかどうか疑問に思っていますか?

オーストラリアの日付 (dd/MM/yyyy) を機能させようとしていますが、web.config にグローバリゼーションを配置した後でも、日付の形式が間違っていると言い続けます。自分のコードのエラーだと思っていましたが、新しいプロジェクトを開始してもエラーが発生します。

新しい MVC 4 Web アプリケーションを開始しました。

以下を web.config ファイルに追加しました

<globalization culture="en-AU" uiCulture="en-AU" />

次に、 AccountModels.csファイルに以下を追加しました。

[DataType(DataType.DateTime)]
[Required(ErrorMessage="Date is required")]
public DateTime? MyDate { get; set; }

次に、 Register.cshtmlファイルに以下を追加しました。

<li>
    @Html.LabelFor(m => m.MyDate)
    @Html.TextBoxFor(m => m.MyDate)
</li>

アプリケーションを実行し、登録ページに移動し、2013 年 3 月 26 日などの日付を入力してみてください。有効な形式ではないと表示されます。

助けてください。

4

4 に答える 4

24

MyDateこの属性をプロパティに追加してみてください:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]

web.configでカルチャを設定する必要がありますが、これにより強制的にその形式になるはずです。

アップデート

わかりましたので、上記の答えは問題を実際には解決しませんが、日付の最初の表示方法の形式を変更したい場合は重要です。重要な注意点は、DisplayFormatアトリビュートはヘルパーによって取得されるのTextBoxForではなく、ヘルパーによって取得されるということですEditorFor

とにかく、本当の解決策に進みましょう。問題は、日付を解析するときにカルチャを考慮しない jQuery 検証です。クライアント側の検証をオフにすると、カルチャを認識しているサーバーで日付が適切に解析されます。

修正は、日付の jQuery 検証をオーバーライドし、追加の jQuery グローバリゼーション プラグインを含めることです。globalize プラグインはこちらで見つけることができます。Nuget Package Manager を使用してプラグインを簡単にダウンロードすることもできます。パッケージ マネージャーを開いて、左側の [オンライン] タブを選択し、検索に「globalize」と入力したところ、最初の結果でした。インストールしたら、次の 2 つのファイルを含めました。

globalize.js
globalize.culture.en-AU.js

スクリプト タグを使用してそれらを直接含めるか、他の jQuery 検証ファイルと一緒にバンドルに配置することができます。

それらを取得したら、次のスクリプトを追加して、日付の jQuery 検証をオーバーライドする必要があります。

<script type="text/javascript">
    $(function () {
        $.validator.methods.date = function (value, element) {
            Globalize.culture("en-AU");
            // you can alternatively pass the culture to parseDate instead of
            // setting the culture above, like so:
            // parseDate(value, null, "en-AU")
            return this.optional(element) || Globalize.parseDate(value) !== null;
        }
    });
</script>

それだけです。これでうまくいくはずです。この回答に対するこのソリューションの功績は次のとおりです。JQuery Validation and MVC 3. How to change date format また、問題に固有の説明をいくつか提供したかっただけです。

于 2013-08-31T19:08:16.307 に答える
0

プロキシ関数の作成についてはどうですか?

var _date = $.validator.methods.date;

$.validator.methods.date = function (value, element) {
    return _date.call(this, Globalize.parseDate(value), element);
};
于 2013-09-20T10:33:35.967 に答える