我找不到在 MVC3 中使用 JQuery 日期选择器的完整解决方案,并且根据我在不同页面上找到的内容,我想出了我的解决方案,但它仍然无法按我的意愿工作。我有以下内容:
该模型:
public class Some
{
[Display(Name = "DateCreated", ResourceType = typeof(Resources))]
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "RequiredField")]
[DataType(DataType.Date, ErrorMessage = "Date non valid.")]
[DisplayFormat(NullDisplayText = "NotSpecified", DataFormatString = "{0:dd.MM.yyyy.}")]
public DateTime DateCreated { get; set; }
}
我正在装饰属性,因为我想要客户端和服务器端验证和文本。
我在这个例子中使用 Home 控制器,我有:
public ActionResult Index()
{
Some model = new Some { DateCreated = DateTime.Now };
return View(model);
}
[HttpPost]
public ActionResult Index(Some model)
{
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View(model);
}
风景:
@model TestDatePicker.Models.Some
@using (Html.BeginForm())
{
<div class="editor-label">
@Html.LabelFor(model => model.DateCreated)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateCreated)
@Html.ValidationMessageFor(model => model.DateCreated)
</div>
<p>
<input type="submit" value="Save" />
</p>
}
以及用于呈现具有 DateTime 类型的字段的自定义模板:
@model Nullable<System.DateTime>
@{
string controlName = ViewData.TemplateInfo.HtmlFieldPrefix;
string controlId = controlName.Replace(".", "_");
if ( Model.HasValue ) {
@Html.TextBox("", String.Format("{0:dd.MM.yyyy.}", Model.Value), new { @class = "textbox", name = controlName })
}
else {
@Html.TextBox("", String.Format("{0:dd.MM.yyyy.}", DateTime.Now), new { @class = "textbox", name = controlName })
}
}
}
<script type="text/javascript">
$(document).ready(function () {
$(".textbox").datepicker
({
dateFormat: 'dd.mm.yy.',
showStatus: true,
showWeeks: true,
highlightWeek: true,
numberOfMonths: 1,
showAnim: "scale",
showOptions: {
origin: ["top", "left"]
},
onClose: function () {
$(this).valid();
}
});
});
</script>
这段代码发生了什么?DateTime 字段的值在自定义模板中分配,并显示为今天的日期。
- 但是,单击 Save 按钮时,在 [HttpPost] Index 方法中,我看到传入的模型不包含今天的日期值,而是 1/1/0001 12:00:00 AM?
- 然后 Model.IsValid 不会传递消息The value '26.05.2012'。对创建日期无效。???对我来说似乎更陌生!
- 上面的消息显示在页面上,而不是我的自定义消息:[DataType(DataType.Date, ErrorMessage = "Date non valid.")]
有趣的是,如果您使用日期选择器并从中选择一个数据,您将获得模型中的属性填充。并且 Model.IsValid 是 TRUE。
输入控件的 html 如下所示:
<input class="textbox" data-val="true" data-val-required="Requred field" id="DateCreated" name="DateCreated" type="text" value="26.05.2012." />
JQueryUI 日期选择器不是 ASP.NET MVC 的最佳选择吗?看来,我在网上看到的自定义模板的这个解决方案,基本的 MVC 东西甚至都不起作用?有谁知道这样做的任何完整教程?我不能成为第一个面临这些问题的人。
谢谢你。
我已经下载了每个人在谈论 MVC3 和 datepicker 时都提到的博客文章中创建的代码,并且那里正在发生同样的事情!