1

timeDateTime Textboxの一部を除外したいのですが、思うように動作させることができません。

これは私がフィールドを設定する方法です:

@Html.TextBoxFor(m => m.DateFrom, "{0:dd/MM/yyyy}", new { @class = "datefrom" })
@Html.TextBoxFor(m => m.DateTo, "{0:dd/MM/yyyy}", new { @class = "dateto" })

Jquery スクリプト:

    $(function () {
        $(".datefrom").datepicker({
            defaultDate: "+1w",
            changeMonth: true,  
            numberOfMonths: 1,
            dateFormat: "dd/mm/yy",
            onClose: function (selectedDate) {
                $("#to").datepicker("option", "minDate", selectedDate);
            }
        });
        $(".dateto").datepicker({
            defaultDate: "+1w",
            changeMonth: true,
            numberOfMonths: 1,
            dateFormat: "dd/mm/yy",
            onClose: function (selectedDate) {
                $("#from").datepicker("option", "maxDate", selectedDate);
            }
        });
    });

今、私はこれらの問題を抱えています:

  • time常にフィールドに表示されます:

ここに画像の説明を入力

  • これdate formatは間違っています: 私の形式は dd/MM/yyyy です。日付は ですNovember 8th 2014が、datepicker はAugust 10th 2014. したがって、datepicker から format で任意の日付を選択するdd/MM/yyyyと、asp.net はそれを次の形式で扱います。MM/dd/yyyy

私が試したこと:

  • 私は使用しようとしましたDataAnnotations::動作し[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]ませんでした

  • Jquery スクリプトを削除しようとしましたが、機能しませんでした

P/s : datetime テキストボックスにtimeは最初の読み込み時に一部が含まれていますが、日付ピッカーから日付を選択した後、そのtime部分はなくなりましたが、上記のように日付の形式が間違っています:

ここに画像の説明を入力

4

1 に答える 1

1

日付が正しくバインドされていない理由は、日付ピッカーがdd/MM/yyyフォーマットを使用しているが、サーバーがMM/dd/yyyyフォーマットを使用しているためです。これを機能させるには、カスタム モデル バインダーを作成して、DateTime値を処理し、必要な形式に解析します。

public class CustomDateTimeBinder : IModelBinder
{
  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
    CultureInfo culture = new CultureInfo("en-GB"); // dd/MM/yyyy
    var date = value.ConvertTo(typeof(DateTime), culture);
    return date;
  }
}

それを登録します(これは、すべての値Global.asaxに適用されることを意味しますDateTime

ModelBinders.Binders.Add(typeof(DateTime), new YourAssembly.CustomDateTimeBinder());
于 2014-11-08T04:17:34.853 に答える