2

このチュートリアルを使用して MvC4 についてもう少し学習しようとしていますが、そのDatetime分野でいくつか問題があります。

最初の問題:この形式
の を使用してエントリを作成しようとすると(例: )、エラーが発生します:datetimeDD/MM/YYYY20/06/2012

フィールド ReleaseDate は日付でなければなりません

だから私はそれがこの形式である必要があると推測しています(これは一般的にデフォルトです):(MM/DD/YYYY06/20/2012)。

2 番目の形式を使用すると、次のメッセージが表示されます。

ReleaseDate の値「06/20/2012」は無効です。

私がそれを機能させる唯一の方法は、月と日の両方を入力するときです <= 12 12/12/2012

2 番目の問題:
これはその頃です。12/12/2012入力して、エントリを正常に作成したとしましょう。デフォルトでは12:00:00 pm、タイムスタンプとして選択されます。問題は、pm の代わりに μμ を入力することです (私の PC の時計はギリシャ語なので、これはギリシャ語で pm です)。

エントリを編集しようとすると、そのためにエラーが発生します。μμ を pm に変更すると、それが受け入れられます。しかし、何も変更せずに有効なエントリからエラーが発生するのは奇妙でちょっと面倒です。

3 番目の問題 (ボーナス) :
数値のフィールドがあります。たとえば199、私はそれを受け入れます。しかし、私のリストでは、それは199,00. もう一度編集しようとして [保存] をクリックすると、次のエラーが表示されます。

フィールド Price は数値でなければなりません。

コンマと00を削除すると、再び受け入れられます..

ご覧のとおり、非常に問題のあるテーブルです:)私の問題で私を助ける答えは大歓迎です。

理想的には、この形式の日時が必要です: DD/MM/YYYY hh:mm:ss(午後と午前 24 時間なし)

しかし、少なくともエラーなしで編集して保存できれば、今のところ満足しています:)

4

1 に答える 1

2

重要な3つのことがあります:

  1. フォーム内の日時フィールドをレンダリングするときに使用される形式
  2. クライアントの日時フィールドを検証するために使用される形式
  3. サーバーの日時フィールドを検証するために使用される形式

理想的には、これら3つの形式は同じである必要があります。ギリシャ文化を使用しているとおっしゃっていたので、web.configでこれを構成することから始めることができます。

<globalization culture="el-GR" uiCulture="el-GR"/>

この段階で、日時フィールドを表示し、サーバーで日時フィールドを検証するdd/MM/yyyyための形式は、el-GRカルチャで使用される形式であるためです。

クライアント側の検証は別の話です。サーバー構成の影響を受けません。これは、クライアントブラウザの設定と文化に影響されます。したがって、カルチャel-GRを使用するように構成されたクライアントブラウザーがある場合は、日時の検証に使用するようにサーバーを構成した場合でも、クライアントの検証ではその形式が使用されます。en-USMM/dd/yyyy

クライアント検証が最初に実行されるため(jqueryの控えめな検証を有効にしていると仮定)、en-US形式が使用され、20/06/2012値がサーバー側カルチャに対して有効であっても、クライアントカルチャに対しては無効です。この問題に対処するには、jquery.globalizeプラグインを使用する必要があります。したがって、ここでカルチャを操作したい場合el-GRは、HTMLドキュメントの最後に追加する必要のあるスクリプトを次に示します。

<script type="text/javascript" src="~/Scripts/jquery-1.8.2.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" src="~/Scripts/globalize.js"></script>
<script type="text/javascript" src="~/Scripts//globalize.culture.el-GR.js"></script>
<script type="text/javascript">
    $.validator.methods.date = function (value, element) {
        return this.optional(element) ||
            !isNaN(Globalize.parseDate(value));
    }
    $.validator.methods.number = function (value, element) {
        return this.optional(element) ||
            !isNaN(Globalize.parseFloat(value));
    }

    Globalize.culture('el-GR');
</script>

これらの値を解析するときにプラグインを使用するために、プラグインのメソッドdatenumberメソッドがどのようにjquery.validateオーバーライドされるかに注意してください。jquery.globalize

もちろん、ページ内にたくさんのスクリプトがあるのは良いことではありません。ASP.NET MVC 4では、それらをバンドルできます。

BundleTable.Bundles.Add(
    new ScriptBundle("~/bundles/scripts")
        .Include("~/Scripts/jquery-1.8.2.js")
        .Include("~/Scripts/jquery.validate.js")
        .Include("~/Scripts/jquery.validate.unobtrusive.js")
        .Include("~/Scripts/globalize.js")
        .Include("~/Scripts/globalize.culture.el-GR.js")
        .Include("~/Scripts/myscript.js")
);

ここmyscript.jsに、オーバーライドされた検証メソッドが含まれます。

$.validator.methods.date = function (value, element) {
    return this.optional(element) ||
        !isNaN(Globalize.parseDate(value));
}
$.validator.methods.number = function (value, element) {
    return this.optional(element) ||
        !isNaN(Globalize.parseFloat(value));
}
Globalize.culture('el-GR');

これで、レイアウトのすべてのスクリプトを単一のバンドルインクルードに置き換えることができます。

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    ...

    @Scripts.Render("~/bundles/scripts")
</body>
</html>

最後のステップは、入力フィールド内の日時フィールドの値をレンダリングするときに使用される形式に対処することです。ヘルパーを使用Html.EditorFor()して対応するモデルプロパティの入力フィールドを生成する場合、このヘルパーはデフォルトで現在のカルチャを使用します。たとえば、DateTimeフィールドがありel-GR、web.configでカルチャをに設定している場合、値は次のようにレンダリングされます。

20/10/2012 12:21:22 μμ

時間部分を削除する場合は、ビューモデルのDateTimeフィールドを[DisplayFormat]属性で装飾し、使用するカスタム形式を指定できます。

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

これは、値をレンダリングするときに使用される形式のみを指定することに注意してください。以前に取り上げた検証と混同しないでください。

于 2012-10-17T09:19:41.037 に答える