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


80

我需要一些有关如何使用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是最简单的解决方案。
迪格洛克

Answers:


79

此答案使用jQuery UI Datepicker,这是一个单独的include。还有其他方法可以不包含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>

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

<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-control datepicker”'&'@class =“ datepicker form-control”'而且没有骰子
Eric Bishard 2014年

3
如果有机会在局部视图中调用它,则该脚本必须在“索引”页面中,否则,如果它是局部视图,则该脚本将不起作用。这也是存在的问题之一固定
奔少年

我可以自动化Razor,以便如果[DataType(DataType.Date)]在字段上定义了Razor,它应该自动添加datepickercss类并运行js吗?
Shimmy Weitzhandler,2015年

1
我在Visual Studio 2015中拥有的MVC 5模板不包含JQuery UI,因此,我很确定您必须先安装并引用它,然后才能起作用。:有这里有一个体面的讨论,链接到相关的教程forums.asp.net/t/...
保罗Angelno

60

此答案仅将type=date属性应用于HTMLinput元素,并依靠浏览器提供日期选择器。请注意,即使在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

26
那不是正确的答案!该解决方案将仅使浏览器特定的日历出现在浏览器中的日期字段中。这与Bootstrap Datetime插件无关。
ilter 2014年

3
这不适用于IE 11和FF38。只有Chrome浏览器可以使用。
immirza

1
此解决方案的另一个问题是,在编辑日期字段时,我只会看到“ mm / dd / yyyy”,而不是已经存在的日期值。
Paul Angelno

19

我希望这可以帮助遇到我同样问题的人。

该答案使用Bootstrap DatePicker插件,它不是Bootstrap的本机。

确保通过NuGet安装Bootstrap DatePicker

创建一小段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文件中设置捆绑包。
阿米特(Amit)

在哪里更新读取<Required> <DataType(DataType.Date)>公共属性DOB为DateTime的部分?= Nothing
Alan

对于那些把头发扯掉的人来说,这似乎是VB.NET。试图将其转换为C#,但是无论我尝试了什么,它都没有执行任何操作。
SteveCav

这似乎是个好主意,但有太多细节无法复制您的解决方案。例如,我没有一个Scripts文件夹,也没有Bundles文件夹,您的代码显然希望其中包含某些脚本?
艾伦·巴尔吉

18

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

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

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


但是您会在视图中使用吗?我尝试了TextBoxFor,但它仍然是一个文本框
Harambe Attack Helicopter

此方法仅在chrome等浏览器中有效。
Kazem

IE将使您的解决方案失败!
immirza

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

嗨,您如何将其设为日期范围,即用户需要从&到
转换器

我很想套用这个,但没有BundleConfig.cs。Razor Pages .net core 2 MVVM体系结构。
艾伦·巴尔吉

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 .class“ datepicker”添加到文本框
5.put $('。datepicker')。datepicker(); 在$(function(){...})中;



-2

简单:

[DataType(DataType.Date)]
Public DateTime Ldate {get;set;}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.