如何使用Razor引擎在MVC 5项目上添加Date Picker Bootstrap 3?

Ben*_*ior 74 asp.net-mvc razor twitter-bootstrap

我需要一些关于如何使用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"));
Run Code Online (Sandbox Code Playgroud)

然后我将脚本添加到索引视图中,如下所示

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

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

现在,如何在这里调用日期选择器?

   <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>
Run Code Online (Sandbox Code Playgroud)

Kar*_*ath 76

这个答案使用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>
Run Code Online (Sandbox Code Playgroud)

然后,为了确保在呈现文本框之后触发javascript,您必须将datepicker调用放在jQuery ready函数中:

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

  • 如果您在部分视图中调用它,则该脚本必须位于"索引"页面中,否则如果它是局部视图则不起作用.这也是修复的问题之一 (3认同)
  • 是的,这正是我现在的代码,它不起作用 (2认同)

小智 53

此答案只是将type=date属性应用于HTML input元素,并依赖浏览器提供日期选择器.请注意,即使在2017年,并非所有浏览器都提供自己的日期选择器,因此您可能希望提供退款.

您所要做的就是在视图模型中向属性添加属性.变量示例Ldate:

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

假设您正在使用MVC 5和Visual Studio 2013.

  • 那不是正确的答案!该解决方案仅允许浏览器在日期字段中显示特定于浏览器的日历.这与Bootstrap Datetime插件无关. (25认同)
  • 这不适用于IE 11和FF 38.只有Chrome会选择这个. (3认同)
  • 这是最好的答案!有没有办法选择时间和日期?`[DataType(DataType.DateTime)] public DateTime BirthDate {get; 组; }`对我不起作用. (2认同)
  • 最简单的解决方案在这里 (2认同)

Enz*_*ero 18

我希望这可以帮助那些面临同样问题的人.

这个答案使用Bootstrap DatePicker插件,它不是bootstrap本机的.

确保通过NuGet安装Bootstrap DatePicker

创建一小段JavaScript并将其命名为DatePickerReady.js将其保存在Scripts目录中.这将确保它甚至可以在非HTML5浏览器中运行,尽管现在这些浏览器很少.

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

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

    });
}
Run Code Online (Sandbox Code Playgroud)

设置捆绑包

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"))
Run Code Online (Sandbox Code Playgroud)

现在设置数据类型,以便在使用EditorFor时,MVC将识别要使用的内容.

<Required>
<DataType(DataType.Date)>
Public Property DOB As DateTime? = Nothing
Run Code Online (Sandbox Code Playgroud)

您的视图代码应该是

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

在此输入图像描述


小智 14

在模型中的datetime属性之前添加这两行

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

结果将是:MVC应用程序中的日期选择器


ste*_*eon 6

尝试根据Enzero的答案提供简明的更新。

  • 安装Bootstrap.Datepicker软件包。

    PM> install-package Bootstrap.Datepicker
    ...
    Successfully installed 'Bootstrap.Datepicker 1.7.1' to ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 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"));
    
    Run Code Online (Sandbox Code Playgroud)
  • 在相关视图中的脚本部分中,启用和自定义日期选择器。

    @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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 最终在相关控件中添加datepicker类。例如,在TextBox中,对于“ 31/12/2018”之类的日期格式,这将是:

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