使用 Bootstrap Datepicker 选择未来日期并将其传递给 ASP.NET MVC 控制器

Posted

技术标签:

【中文标题】使用 Bootstrap Datepicker 选择未来日期并将其传递给 ASP.NET MVC 控制器【英文标题】:Selecting future date with Bootstrap Datepicker and passing it to ASP.NET MVC Controller 【发布时间】:2013-10-23 10:41:18 【问题描述】:

我尝试将包含在 html 表单中的 Bootstrap datepicker 中的日期传递给 ASP.NET MVC3 控制器。问题是当我选择过去的日期时,传递给控制器​​的模型在适当的 DateTime 字段中填充了正确的值。但是,当我选择现在或将来的日期时,我在 StartDate DateTime 字段中得到 0001-01-01 值。 这是视图的代码:

@using (Ajax.BeginForm("AddNewActivity", "Home", null, new AjaxOptions

    HttpMethod = "Post",
    UpdateTargetId = "activitiesTableDiv",
    InsertionMode = InsertionMode.Replace,
    OnBegin = "disableButton"
))

    @Html.ValidationSummary(true)
    <fieldset>
        <div class="editor-label">
            Start date
        </div>
        <div class="editor-field">
            <input id="StartDate" data-date-format="dd-mm-yyyy" class="pickDate form-control valid"
                type="text" name="StartDate" data-val-required="The StartDate field is required."
                data-val="true" />
            @Html.ValidationMessageFor(model => model.StartDate)</div>
    </fieldset>

控制器端 - POST 方法:

public ActionResult AddNewActivity(ActivityModel model, FormCollection collection)
    
        var test = model.StartDate;

         if (model.ObjectId == null)
            objectid = model.ObjectId;

        var jury = model.UserIds.Split(';').ExtractInt32();

        string[] emails = jury.Select(i => Storage.UserGetById(i).Email).ToArray();
        if (model.UserIds.Length > 1 && model.UserIds[model.UserIds.Length - 1] == ';')
            model.UserIds = model.UserIds.Substring(0, model.UserIds.Length - 1);

        var tags = HtmlHelperExtension.ExtractCheckListBoxResult(collection).Where(i => i.Item2).Select(i => i.Item1).ToArray();
        var groups = model.ChosenGroups.Where(i => i.Checked == true).Select(i => i.Id).ToArray();

        var url = String.Format("0://12", Request.Url.Scheme, Request.Url.Authority, Url.Content("~/"));
        SendActivityEmails(model.Name, url + "OIP/Activity/", emails);

        return RedirectToAction("_Activities", "OIP");
    

型号:

public class ActivityModel

    public long Id  get; set; 

    public string ObjectId  get; set; 

    public TagDTO[] Tags  get; set; 

    public ModelItemChecked[] ChosenTags  get; set; 

    public DateTime StartDate  get; set; 

    public DateTime Deadline  get; set; 

    public DateTime ResultsAnnouncement  get; set; 

我找不到遇到类似问题的人。

【问题讨论】:

向我们展示实际的 POST 正文和模型类。 【参考方案1】:

我认为问题出在以下代码中的日期格式字符串:

<input id="StartDate" data-date-format="dd-mm-yyyy" class="pickDate form-control valid"
            type="text" name="StartDate" data-val-required="The StartDate field is required."
            data-val="true" />

去掉 data-date-format html 属性,你会发现它又可以工作了。否则,如果您希望更改传递的日期格式,则需要在日期字段中添加以下属性:

[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="dd-mm-yyyy")]
public DateTime StartDate  get;set; 

【讨论】:

以上是关于使用 Bootstrap Datepicker 选择未来日期并将其传递给 ASP.NET MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章

React bootstrap datepicker - 自定义

bootstrap datepicker 可以选择时分秒吗

angularjs之ui-bootstrap的Datepicker Popup不使用JS实现双日期选择控件

bootstrap-datepicker 全局设置语言

Bootstrap Datepicker 不工作。使用 BootStrap 3.3.1

如何使用 bootstrap-datepicker 更新多个输入