为什么日期选择器值不分配表单输入值
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
传递数据
我遇到了与这个问题类似的问题,即使不是同一个问题: 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
传递数据