I want to use the Bootstrap 3 DateTimePicker. I added it to my ASP.NET project using NuGet.
Here's my BundleConfig.cs:
bundles.Add(new StyleBundle("~/Content/Bootstrap").Include("~/Content/bootstrap.css",
"~/Content/bootstrap-theme.css",
"~/Content/bootstrap-theme.min.css",
"~/Content/bootstrap.min.css",
"~/Content/less/_bootstrap-datetimepicker.less",
"~/Content/less/bootstrap-datetimepicker-build.less"));
bundles.Add(new ScriptBundle("~/Scripts/Bootstrap").Include(
"~/Scripts/moment.min.js",
"~/Scripts/bootstrap.js",
"~/Scripts/bootstrap.min.js",
"~/Scripts/bootstrap-datetimepicker.js",
"~/Scripts/bootstrap-datetimepicker.min.js"));
And I'm using it in my View like this:
<div class="container">
<div class="col-sm-6">
<div class="form-group">
<div class="row">
<div class="col-md-8">
<div id="datetimepicker12"></div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#datetimepicker12').datetimepicker({
inline: true,
sideBySide: true
});
});
</script>
</div>
But it doesn't work; any Ideas?
The easiest way in MVC with bootstrap would be to set the properties in your model with Data Annotations.
Here is a link that should help you. Using Data Annotations for Model Validation
[DisplayName("Owners Date of Birth:")]
Will display in the @Html.LabelFor
and this will be the label for your field.
[DataType(DataType.Date)]
This sets the attribute style and can be customized,
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
This is the display format you would set to show in your Views.
public DateTime ODoB { get; set; }
This set the storage type of the data. this will not allow Nullable values.
public DateTime? ODoB { get; set; }
if you add the question mark after DateTime this will allow the value to be null.
Model:
using System.ComponentModel.DataAnnotations;
Public class contact
{
[Required(ErrorMessage = "Please Enter the owners First Name!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("First Name:")]
[Display(Order = 9)]
public string OFirstName { get; set; }
[Required(ErrorMessage = "Please Enter the owners Last Name!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("Last Name:")]
[Display(Order = 10)]
public string OLastName { get; set; }
[Required(ErrorMessage = "Please Enter the owners Address!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("Address:")]
[Display(Order = 11)]
public string OAddress { get; set; }
[Required(ErrorMessage = "Please Enter the owners City!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("City")]
[Display(Order = 12)]
public string OCity { get; set; }
[Required(ErrorMessage = "Please Enter the owners County!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("County:")]
[Display(Order = 13)]
public string OCounty { get; set; }
[DisplayName("State:")]
[Display(Order = 14)]
public States OState { get; set; }
[Required(ErrorMessage = "Please Enter the owners Postal code!")]
[StringLength(50, MinimumLength = 3)]
[DisplayName("Zip:")]
[Display(Order = 15)]
public string OPostal { get; set; }
[Required(ErrorMessage = "You have not entered a phone numer for the Owner, Please enter the owners phone number so we can get back to you!")]
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$", ErrorMessage = "Invalid Phone Number!")]
[StringLength(32)]
[DisplayName("Phone Number")]
[Display(Order = 16)]
public string OPhone { get; set; }
[Required(ErrorMessage = "You have not entered an Email address, Please enter your email address!")]
[DataType(DataType.EmailAddress)]
[DisplayName("Email Address")]
[StringLength(128)]
[RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$", ErrorMessage = "The Email field is not valid, Please enter a valid email address!")]
[Display(Order = 17)]
public string OUserEmailAddress { get; set; }
[Required(ErrorMessage = "Please Enter your Social Security Number!")]
[DisplayName("SSN #:")]
[RegularExpression(@"^\d{9}|\d{3}-\d{2}-\d{4}$", ErrorMessage = "Invalid Social Security Number")]
[Display(Order = 18)]
public string OSocialNum { get; set; }
[Required(ErrorMessage = "Please Enter the Owners Date of Birth!")]
[DisplayName("Owners Date of Birth:")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[Display(Order = 19)]
public DateTime ODoB { get; set; }
[Required(ErrorMessage = "Please Enter the Owners Occupation!")]
[StringLength(100, MinimumLength = 3)]
[DisplayName("What is your Occupation:")]
[Display(Order = 20)]
public string OOccupation { get; set; }
}
View:
<div class="col-md-4">
<div class="form-group">
@Html.LabelFor(model => model.ODoB, htmlAttributes: new { @class = "control-label col-md-8" })
@Html.EditorFor(model => model.ODoB, new { htmlAttributes = new { @class = "form-control", @style = "width:300px" } })
@Html.ValidationMessageFor(model => model.ODoB, "", new { @class = "text-danger" })
</div>
</div>
This display will show differently from IE to Chrome, IE is not yet HTML 5 compatible, but this will let the person filling out the form select each field of the date. there are many different conversions and templates you can create to achieve anything you want from the model. you can actually create your own template for display of any field type using the [UIHint]
in your model. Here are a few links -
Custom templates in Asp.Net MVC
Asp.Net MVC annotated for input/
Editor templates, Data annotations and Telerik - oh my!
Hope this helped you