Razor 엔진을 사용하여 MVC 5 프로젝트에 Date Picker Bootstrap 3을 추가하는 방법은 무엇입니까?


81

Razor 엔진을 사용하여 MVC 5 프로젝트에 Date Picker Bootstrap 3 을 설치하는 방법에 대한 지침이 필요합니다 . 여기 에서이 링크를 찾았 지만 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

waqar ahmed가 가장 간단한 솔루션입니다.
Dieglock

답변:


79

이 답변은 별도의 포함 인 jQuery UI Datepicker를 사용합니다 . jQuery UI를 포함하지 않고이를 수행하는 다른 방법이 있습니다.

먼저 다음과 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>

그런 다음 텍스트 상자가 렌더링 된 후 자바 스크립트가 트리거되도록하려면 jQuery 준비 함수에 datepicker 호출을 넣어야합니다.

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

4
그래,이게 내가 지금 내 코드를 얼마나 정확하게 그리고 그것은 작동하지 않습니다
에릭 Bishard

1
이것이 제가 파운데이션을 사용하는 이유입니다! 난 당신이 같은 일이, 내가 노력이 '@class = "형태로 제어 날짜 선택기"'& '@class = "날짜 선택기 폼 컨트롤"'없이 주사위
에릭 Bishard

3
혹시 부분보기에서 호출하는 경우 스크립트가 색인 페이지에 있어야합니다. 그렇지 않으면 부분보기 인 경우 작동하지 않습니다. 이것은 또한 있던 문제 중 하나는 고정
벤 주니어

[DataType(DataType.Date)]필드에 정의 된 경우 자동으로 datepickerCSS 클래스를 추가 하고 js를 실행 하도록 Razor를 자동화 할 수 있습니까 ?
Shimmy Weitzhandler 2015 년

1
Visual Studio 2015에있는 MVC 5 템플릿에는 JQuery UI가 포함되어 있지 않으므로이 작업을 수행하기 전에 먼저 설치하고 참조해야합니다. 괜찮은 토론 관련 튜토리얼에 대한 링크가 여기에있다 : forums.asp.net/t/...는
폴 Angelno

61

이 답변 은 HTML 요소에 type=date속성 을 적용하고 input브라우저에 의존하여 날짜 선택기를 제공합니다. 2017 년에도 모든 브라우저가 자체 날짜 선택기를 제공하는 것은 아니므로 대체 기능을 제공하는 것이 좋습니다.

뷰 모델의 속성에 속성을 추가하기 만하면됩니다. 변수 예 Ldate:

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

MVC 5 및 Visual Studio 2013을 사용한다고 가정합니다.


3
이것이 최고의 대답입니다! 시간과 날짜를 선택할 수있는 방법이 있습니까? [DataType(DataType.DateTime)] public DateTime BirthDate { get; set; }나를 위해 일하지 않았다.
Yoda 2014 년

2
가장 간단한 해결책은 여기에 있습니다
Hoang Trinh 2014 년

26
정답이 아닙니다! 이 솔루션은 날짜 필드에 대해 브라우저에 브라우저 별 달력이 표시되도록합니다. 그것은 Bootstrap Datetime 플러그인과 관련이 없습니다.
ilter

3
IE 11 및 FF 38에서는 작동하지 않습니다. Chrome에서만 선택할 수 있습니다.
immirza

1
이 솔루션의 다른 문제는 날짜 필드를 편집 할 때 이미 존재하는 날짜 값 대신 "mm / dd / yyyy"만 표시된다는 것입니다.
Paul Angelno

19

모델의 datetime 속성 앞에이 두 줄만 추가합니다.

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

결과는 다음과 같습니다.MVC 애플리케이션의 날짜 선택기


하지만 뷰에서 사용 하시겠습니까? 나는 TextBoxFor을 시도했지만 여전히 텍스트 상자의
Harambe 공격 헬기

이 방법은 크롬과 같은 일부 브라우저에서만 작동합니다.
Kazem

IE는 솔루션을 실패합니다!
immirza

누구든지이 오류가있는 경우 : 정의되지 않은 속성 'msie'를 읽을 수 없습니다. 이것은 고정
ruben450

19

나는 이것이 내 같은 문제에 직면 한 사람을 도울 수 있기를 바랍니다.

이 답변은 부트 스트랩에 기본이 아닌 Bootstrap DatePicker Plugin을 사용합니다 .

NuGet을 통해 Bootstrap DatePicker를 설치해야합니다.

작은 JavaScript 조각을 만들고 이름을 DatePickerReady.js로 지정하고 Scripts dir에 저장합니다. 이렇게하면 요즘은 거의 없지만 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 파일에서 번들을 설정합니다.
Amit 2011 년

<Required> <DataType (DataType.Date)> Public Property DOB As DateTime을 읽는 부분을 어디에서 업데이트합니까? = Nothing
Alan

머리카락을 찢는 사람들에게는 VB.NET으로 보입니다. 그것을 C #으로 변환하려고 시도했지만 내가 무엇을 시도해도 아무것도하지 않았습니다.
SteveCav

이것은 좋은 생각처럼 보이지만 솔루션을 복제하기에는 너무 많은 세부 사항이 있습니다. 예를 들어, Scripts 폴더 나 Bundles 폴더가 없습니다. 코드가 특정 스크립트로 채워질 것으로 예상하는 것 같습니다.
Alan Baljeu

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"));
    
  • 관련보기의 스크립트 섹션에서 datepicker를 활성화하고 사용자 지정합니다.

    @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" })
    

안녕, 당신은 어떻게이 날짜 범위, 즉 사용자의 요구가에서 &로 두 날짜를 선택하기 위해 어떻게해야합니까
변압기

이것을 적용하고 싶지만 BundleConfig.cs가 없습니다. Razor Pages .net 코어 2 MVVM 아키텍처.
Alan Baljeu

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
입력 유형 "날짜"(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 .add class "datepicker"to textbox
5.put $ ( '. datepicker'). datepicker (); $ (function () {...});



-2

단순한:

[DataType(DataType.Date)]
Public DateTime Ldate {get;set;}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.