为什么日期选择器值不分配表单输入值

Why aren't datepicker values assigning the form input a value

我遇到了与这个问题类似的问题,即使不是同一个问题: Jquery datepicker selected date not assigning the value

然而给出的答案几乎毫无用处。

我有一个 asp.net MVC 应用程序,其中详细信息从视图中的表单发送到控制器,但在调试时值只是默认的 DateTime 值。

经检查,无论是在输入时还是在使用 JQuery UI 日期选择器时,都没有分配值。

使用此脚本来利用 Jquery-ui 日期选择器

<script>
$(document).ready(function() {
    $("#startDatePicker").datepicker();
    $("#endDatePicker").datepicker();
})
</script>

这是创建表单的代码,封装在@using (Html.BeginForm()){ }

        <div class="form-group">
        @Html.LabelFor(model => model.End_Date, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.End_Date, new { htmlAttributes = new { @class = "form-control", id= "endDatePicker" } })
            @Html.ValidationMessageFor(model => model.End_Date, "", new { @class = "text-danger" })
        </div>
    </div>

帮助甚至解释为什么会发生这种情况将不胜感激

谢谢。

编辑 - 型号:

 public partial class BPO
 {
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public BPO()
    {
        this.Order_Log = new HashSet<Order_Log>();
    }

    [Display(Name = "BPO")]
    public string BPO_ID { get; set; }
    [Display(Name = "Start Date")]
    public System.DateTime Start_Date { get; set; }
    [Display(Name = "End Date")]
    public System.DateTime End_Date { get; set; }
    [Display(Name = "In Use")]
    public bool In_Use { get; set; }
    [Display(Name = "Used For")]
    public string Used_For { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Order_Log> Order_Log { get; set; }
}

编辑 2 - 控制器方法:

/**
     * Returns a View
     */
    public ActionResult AddBPO()
    {
        return View();  //Returns AddBPO.cshtml
    }

    /**
     * Adds a BPO Number to the BPO Database
     * @Param pO The BPO Number passed by POST
     */
    [HttpPost]
    public ActionResult AddBPO(BPO pO)
    {
        try
        {
            SFI.BPOes.Add(pO);                      //Add pO to the BPO Table
            SFI.SaveChanges();                      //Save the changes to the Database
            return RedirectToAction("RequestItem"); //Redirect to RequestItem
        }
        catch (Exception ex)
        {
            ViewBag.Message = ex.Message;   //Set the error message to the ViewBag
            return View(pO);                //Return AddBPO.cshtml with the data pO
        }
    }

试试这个 @Html.EditorFor(model => model.End_Date, new { htmlAttributes = new { @class = "form-control", @id= "endDatePicker" } })

 $(function () {
         $("[id$=input__Dob]").datepicker({
             dateFormat: 'yy/mm/dd',
             showOn: 'button',
             buttonImageOnly: true,
             buttonImage: '../Images/calender.png'
         });
     });

// input__Dob : 文本框 ID 文本框的 buttonImage 端是 calender.png 确保图像在文件夹

我找到了解决办法。 (更多解决方法 请参阅实际修复的编辑

日期通过 post 传递,但未转换为日期时间,因为它们的格式不正确

为了解决这个问题,我们直接从 POST 获取数据 Request["Start_Date"] Request["End_Date"]

然后将数据格式化为可被System.DateTime

解析的字符串
private string FormatToDate(String date)
{
    string formattedDate = date.Substring(6,4) +"/"+ date.Substring(0,2) + "/" + date.Substring(3,2) +" 00:00:00.000";
    return formattedDate;
}

这是修复它的最终代码

BPO newBPO = new BPO()
{
    BPO_ID = bPO.BPO_ID,
    Start_Date = DateTime.Parse(FormatToDate(Request["Start_Date"].ToString())),
    End_Date = DateTime.Parse(FormatToDate(Request["End_Date"].ToString()))
};

编辑:

修复

(无解决方法)

使用 DataAnnotations 在模型中设置数据类型。

using System.ComponentModel.DataAnnotations;

[DataType(DataType.Date)]
[Display(Name ="Start Date")]
public DateTime Start_Date { get; set; }

这将提供一个日期选择器,使 jquery-ui api 变得多余,并允许通过 POST

传递数据