Razorエンジンを使用してMVC5プロジェクトにDatePicker Bootstrap 3を追加するにはどうすればよいですか?


81

Razorエンジンを使用してMVC5プロジェクトにDatePicker Bootstrap3をインストールする方法に関するガイドラインが必要です。このリンクをここで見つけましが、VS2013で機能させることができませんでした。

上記の後のリンクの例からコピーして、私はすでに次のことを行いました:

            bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                  "~/Scripts/bootstrap.js",
                  "~/Scripts/bootstrap-datepicker.js",    // ** NEW for Bootstrap Datepicker
                  "~/Scripts/respond.js"));

        bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/bootstrap-datepicker.css",  // ** NEW for Bootstrap Datepicker
                  "~/Content/site.css"));

次に、次のようにスクリプトをインデックスビューに追加しました

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

<script type="text/javascript">
    $('.datepicker').datepicker(); //Initialise any date pickers
</script>
}

さて、ここで日付ピッカーを呼び出す方法は?

   <div class="form-group input-group-sm">
    @Html.LabelFor(model => model.DropOffDate)
    @Html.TextBoxFor(model => model.DropOffDate, new { @class = "form-control", placeholder = "Enter Drop-off date here..." })
    @Html.ValidationMessageFor(model => model.DropOffDate)
</div>

使用しているcshtml / Razorコードが機能しないことを示してください。ありがとう
Eric Bishard 2014年

返信いただきありがとうございます。それに応じて投稿を更新しました
ベンジュニア

VSを起動して、理解できるかどうかを確認します。
Eric Bishard 2014年

NuGetを使用してファイルを追加しましたか、それとも手動で追加しましたか?
mehdiway 2015

waqarahmedは断然最も簡単な解決策です。
Dieglock 2016

回答:


79

この回答では、個別のインクルードであるjQuery UIDatepickerを使用しています。jQueryUIを含めずにこれを行う方法は他にもあります。

まず、次datepickerの項目に加えて、クラスをテキストボックスに追加するだけですform-control

<div class="form-group input-group-sm">
    @Html.LabelFor(model => model.DropOffDate)
    @Html.TextBoxFor(model => model.DropOffDate, new { @class = "form-control datepicker", placeholder = "Enter Drop-off date here..." })
    @Html.ValidationMessageFor(model => model.DropOffDate)
</div>

次に、テキストボックスがレンダリングされた後にjavascriptがトリガーされるようにするには、jQueryready関数にdatepicker呼び出しを配置する必要があります。

<script type="text/javascript">
    $(function () { // will trigger when the document is ready
       $('.datepicker').datepicker(); //Initialise any date pickers
    });
</script>

4
ええ、これはまさに私が今私のコードを持っている方法であり、それは機能していません
Eric Bishard 2014年

1
これが私がFoundationを使用する理由です!私はあなたと同じことをしています。「@ class = "form-controldatepicker"」と「@ class = "datepicker form-control"」を
試しましたが

3
万が一、部分ビューで呼び出す場合は、スクリプトがインデックスページにある必要があります。そうでない場合、部分ビューの場合は機能しません。これも修正された問題の1つでした
ベンジュニア

Razorを自動化[DataType(DataType.Date)]して、フィールドに定義されている場合、自動的にdatepickercssクラスを追加してjsを実行するようにできますか?
シミーワイツハンドラー2015年

1
Visual Studio2015にあるMVC5テンプレートにはJQueryUIが含まれていないため、これが機能する前に、まずJQueryUIをインストールして参照する必要があると確信しています。関連するチュートリアルへのリンクをここにまともな議論があります:forums.asp.net/t/...は
ポールAngelno

61

この回答は、単にtype=date属性をHTMLinput要素に適用し、ブラウザーに依存して日付ピッカーを提供します。2017年でも、すべてのブラウザが独自の日付ピッカーを提供しているわけではないため、フォールバックを提供することをお勧めします。

ビューモデルのプロパティに属性を追加するだけです。変数の例Ldate

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
Public DateTime Ldate {get;set;}

MVC5とVisualStudio2013を使用していると仮定します。


3
これが最良の答えです!日時を選ぶ方法はありますか? [DataType(DataType.DateTime)] public DateTime BirthDate { get; set; }私にはうまくいきませんでした。
ヨーダ

2
最も簡単な解決策はここにあります
Hoang Trinh 2014年

26
それは正解ではありません!このソリューションでは、ブラウザ固有のカレンダーが日付フィールドのブラウザにのみ表示されるようになります。これは、BootstrapDatetimeプラグインとは何の関係もありません。
ilter 2014年

3
これは、IE11およびFF38では機能しません。Chromeのみがこれを検出します。
immirza 2017

1
このソリューションのもう1つの問題は、日付フィールドを編集すると、既存の日付値の代わりに「mm / dd / yyyy」が表示されることです。
ポールアンジェノ2017年

19

モデルのdatetimeプロパティの前にこれらの2行だけを追加します

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

結果は次のようになります:MVCアプリケーションの日付ピッカー


しかし、ビューで使用しますか?TextBoxForを試しましたが、それでもテキストボックスです
Harambe Attack Helicopter

この方法は、chromeなどの一部のブラウザでのみ機能します。
カゼム

IEはソリューションに失敗します!
immirza 2017

誰かがこのエラーを持っていた場合:未定義のプロパティ 'msie'を読み取ることができません。これで修正されました
ruben4 5020年

19

これが私の同じ問題に直面した誰かを助けることができることを願っています。

この回答では、ブートストラップにネイティブではないブートストラップDatePickerプラグインを使用しています。

NuGetを介してBootstrapDatePickerをインストールしてください

JavaScriptの小さな部分を作成し、DatePickerReady.jsという名前を付けて、Scriptsディレクトリに保存します。これにより、HTML5以外のブラウザでも確実に機能するようになりますが、最近はほとんどありません。

if (!Modernizr.inputtypes.date) {
    $(function () {

       $(".datecontrol").datepicker();

    });
}

バンドルを設定する

bundles.Add(New ScriptBundle("~/bundles/bootstrap").Include(
              "~/Scripts/bootstrap.js",
              "~/Scripts/bootstrap-datepicker.js",
              "~/Scripts/DatePickerReady.js",
              "~/Scripts/respond.js"))

bundles.Add(New StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/bootstrap-datepicker3.css",
              "~/Content/site.css"))

ここで、EditorForが使用されるときに、MVCが何を使用するかを識別するようにデータ型を設定します。

<Required>
<DataType(DataType.Date)>
Public Property DOB As DateTime? = Nothing

ビューコードは次のようになります

@Html.EditorFor(Function(model) model.DOB, New With {.htmlAttributes = New With {.class = "form-control datecontrol", .PlaceHolder = "Enter Date of Birth"}})

と出来上がり

ここに画像の説明を入力してください


1
PS-App_StartフォルダーのBundleConfig.csファイルにバンドルを設定します。
2016年

<Required> <DataType(DataType.Date)> Public Property DOB As DateTimeを読み取る部分をどこで更新しますか?=なし
アラン

これは、髪を引き裂く人にとってはVB.NETのようです。それをc#に変換しようとしましたが、何を試しても何も起こりませんでした。
SteveCav 2017

これは良い考えのように思えますが、ソリューションを複製するには詳細が多すぎます。たとえば、ScriptsフォルダーもBundlesフォルダーもありませんが、コードが特定のスクリプトで埋められることを期待しているようです。
AlanBaljeu20年

7

Enzeroの回答に基づいて、簡潔な更新を提供しようとしています。

  • Bootstrap.Datepickerパッケージをインストールします。

    PM> install-package Bootstrap.Datepicker
    ...
    Successfully installed 'Bootstrap.Datepicker 1.7.1' to ...
    
  • APPSTART / BundleConfig.cs、バンドルに関連するスクリプトとスタイルを追加します。

    bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
          //...,
          "~/Scripts/bootstrap-datepicker.js",
          "~/Scripts/locales/bootstrap-datepicker.YOUR-LOCALE-CODE-HERE.min.js"));
    
    bundles.Add(new StyleBundle("~/Content/css").Include(
          ...,
          "~/Content/bootstrap-datepicker3.css"));
    
  • 関連ビューのスクリプトセクションで、日付ピッカーを有効にしてカスタマイズします。

    @section scripts{
        <script type="text/javascript">
            //...
            $('.datepicker').datepicker({
                format: 'dd/mm/yyyy', //choose the date format you prefer
                language: "YOUR-LOCALE-CODE-HERE",
                orientation: 'left bottom'
            });
        </script>
    
  • 最終的に、関連するコントロールにdatepickerクラスを追加します。たとえば、TextBoxの場合、「31/12/2018」などの日付形式の場合、これは次のようになります。

    @Html.TextBox("YOUR-STRING-FOR-THE-DATE", "{0:dd/MM/yyyy}", new { @class = "datepicker" })
    

こんにちは、これを日付範囲にするにはどうすればよいですか。つまり、ユーザーは&から2つの日付を選択する必要があります
トランスフォーマー

これを適用したいのですが、BundleConfig.csがありません。Razor Pages.netコア2MVVMアーキテクチャ。
AlanBaljeu20年

4
[DataType(DataType.Date)]
public DateTime BirthDate { get; set; }

このようにモデルを飾ります。私がこれを使用したブートストラップ日時ピッカーを使用できます。 https://github.com/Eonasdan/bootstrap-datetimepicker/

ブートストラップcssとjsのバンドルはすでにあると思います

日付ピッカーバンドルエントリ

 bundles.Add(new ScriptBundle("~/bundles/datePicker").Include(
           "~/Scripts/moment.min.js",
           "~/Scripts/bootstrap-datetimepicker.min.js"));

        bundles.Add(new StyleBundle("~/Content/datepicker").Include(
                 "~/Content/bootstrap-datetimepicker.min.css"));

レイアウトビューでバンドルをレンダリングする

@Styles.Render("~/Content/datepicker")
@Scripts.Render("~/bundles/datePicker")

表示されているHTML

<div class="form-group">
        @Html.LabelFor(model => model.BirthDate, htmlAttributes: new { @class = "lead col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.BirthDate, new { @class = "datetimepicker form-control" })
            @Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" })
        </div>
</div>

ビューの最後にこれを追加します。

<script>
    $(document).ready(function () {
        $('.datetimepicker').datetimepicker({
            format: 'lll'
        });
    });
</script>

1
入力タイプ「date」(Datatype.Dateで設定)は、現在Chrome、Safari、Operaでのみサポートされていることを考慮してください(ここで確認できます:w3schools.com/html/html_form_input_types.asp)。
leiseliesel 2015

1
@leiselieselブートストラップ日時ピッカーを使用して回答を更新しました。
dnxit 2015

3

1.最初に
jquery.jsを参照していることを確認します2.レイアウトを確認し、「〜/ bundles / bootstrap」を呼び出していることを確認します3.レイアウトを確認します。
レンダリングセクションのスクリプトの位置を参照してください。「〜/ bundles / bootstrap」の後にある必要があります
4
。テキストボックスにクラス「datepicker」を追加します5.put $( '。datepicker')。datepicker(); $(function(){...});



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.