6

モデルバインダーで次のようなコードを使用するのは良いアプローチですか?

TryParseDate(result.AttemptedValue, format, out parsedDate) 

そして、「フォーマット」は、異なる (顧客固有の) 日付フォーマットを持つ変数です。2013 年 12 月 31 日や 2013 年 12 月 31 日などのように。

ユーザーが 1/1/2014 のように 1 桁のみの日付を入力すると、「フォーマット」値でフォーマットが許可されているため、解析されないため、フォーマットバインディングに大きな問題があります: dd/MM/yyyy が可能であることを知っています。この形式を d/M/yyyy に置き換えて解決すると、両方のケースで機能しますが、それは良いアプローチですか、それとも危険ですか?

前もって感謝します!

4

1 に答える 1

1

デフォルトのモデル バインダーを残して作業を行うことをお勧めします。これは非常にうまく機能し、ローカリゼーションの問題 (つまり、ロケールごとに異なる日付形式) に対処します。

yyyy-MM-ddユーザーが日付を入力する方法には常に制限があることを考慮してください (たとえば、有効な日付形式であっても、入力を許可しません)。カスタム バインダー コードは、フォーマットを提供するため、それを変更しません。

ユーザーが最も一般的な形式で日付を入力できるようにすることをお勧めします (たとえばdd/MM/yyyy、英国、スペイン、MM/dd/yyyy米国など)。これでほとんどのケースに対応できます。異なるロケールのユーザーに対応する必要がある場合、ユーザー セッションのスレッド カルチャを設定している限り、既定のモデル バインダーがすべてを行います。

string cultureCode = "en-GB";    //retrieve eg. from user profile
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureCode)

他の形式で日付を入力しているユーザーを支援したい場合は、予想される形式を説明するヒントをページに追加してください。

ロケールごとに複数の形式を受け入れる必要がある場合は、カスタム モデル バインダーを作成する必要があり、扱うロケールごとに受け入れ可能な形式の配列を渡してみるとよいでしょう。

于 2013-07-11T14:31:41.177 に答える