0

**更新

Firefoxを使用しない限り、投稿中に日付がデータバインドされていないことに気づきました。

ブラウザがサーバー側のデータバインディングに影響を与えるのはなぜですか?

クレイジーな薬を飲んでいるような気がします


私の問題は、正しい方法(mm / dd / yyyy)でフォーマットされているように見えるJQuery日付ピッカーがありますが、値がサーバーに送信されると、月と日が入れ替わるということです。

日付プロパティは次のようにページに追加されます(投稿中にバインドできるように非表示になっています。単純なテキストボックスの場合も問題は同じです)。

<input type="hidden" name="SearchByDate" id="SearchByDate" value="<%: ((DateTime)Model.SearchByDate).ToString(Web.Common.Config.GetDateFormatBase) %>" />

私のビューモデルでは、次のように日付形式を指定します。

    [DisplayFormat(DataFormatString = Common.Config.GetDateFormat, 
        ApplyFormatInEditMode = true)]
    public DateTime? SearchByDate { get; set; }

私のjavascriptdatepickerは次のようにフォーマットされています:

        $("#appointmentDateDiv").datepicker({
------>     dateFormat: "<%= Web.Common.Config.GetDateFormatJavascript %>",
            changeMonth: true,
            onSelect: function (dateText, inst) {
                $("#SearchByDate").val(dateText);
                $("form").submit();
            }
        });

私は実際に次のような一般的なクラスのフォーマットを分離します:

public const string GetDateFormatBase = @"MM/dd/yyyy";
public const string GetDateFormat = @"{0:" + GetDateFormatBase + "}"; //This is for annotations
public const string GetDateFormatJavascript = "mm/dd/yy";

ご覧のとおり、形式はすべてsam:monthdayyearです。このようなページを最初に読み込んだときはすべてが良さそうなので、日付ピッカーを使用すると、適切な形式で日付を選択できます。次に投稿しますが、コードをステップスルーしても、すべてが正常に見えます。ビューに戻る前に、日付を再フォーマットして確認します。しかし、月と日は常に入れ替わります。

ただし、最も奇妙なことは、Firefoxではすべてが正常に機能することです。IE、Chrome、Operaでは失敗します。でも理由がわからない…

4

2 に答える 2

1

助けてくれてありがとう。

@JohnKoerner、あなたは正しかった、それはl18nの問題だった。私のFirefoxはen-USに設定され、他のブラウザはen-CAでした。異なる日付形式になるとは思いませんでしたが、そうでした。これにより、モデルのバインド中に問題が発生しました。私の解決策は、不変のカルチャを使用して、カスタムモデルバインダーのすべての日付を解析することでした。ここからアイデアを得ました。

しかし、私はすでにここから別のモデルバインダーを使用していました。そして、私はこのように関連するコードを変更しました

retVal = (Nullable<T>)value.ConvertTo(typeof(T), CultureInfo.InvariantCulture);

ここで、Tは解析されている日時です。

もう1つは、DateTimeとDateTimeの両方にカスタムモデルバインダーを登録することです。このような:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeModelBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeModelBinder());
于 2012-05-28T13:10:36.050 に答える
0

非表示フィールドでString.Formatを使用できます。

<input type="hidden" name="SearchByDate" id="SearchByDate" value="<%:
String.Format("{0:MM/dd/yyyy}",Model.SearchByDate) %>" />
于 2012-05-25T17:26:02.543 に答える