如何为@Html.EditorFor生成的datepicker日期选择器设置初始值
问题原因
@Html.EditorFor是ASP.NET MVC的强类型视图辅助方法,会优先绑定对应模型属性的值,你在htmlattributes中手动设置的@value属性会被模型属性的默认值(未赋值时为空)覆盖,因此不生效。
可行解决方案
- 方案1:控制器端给模型属性赋值(最推荐,符合MVC绑定规范)
在返回视图的Action中直接给StartDate赋值,视图不需要额外修改,EditorFor会自动读取模型值作为初始值:
// 控制器代码示例 public ActionResult YourPageAction() { var model = new YourViewModel(); // 给StartDate赋值为目标初始日期 model.StartDate = new DateTime(2021, 10, 18); return View(model); }
视图保持原有写法即可:
@Html.EditorFor(model => model.StartDate, new { htmlattributes = new { @class = "datepicker" } })
- 方案2:在datepicker初始化时指定初始日期
如果你用的是jQuery UI Datepicker这类前端日期组件,可以直接在初始化配置中设置默认日期,不需要修改后端或视图Helper代码:
$('.datepicker').datepicker({ // 注意JS中月份从0开始计数,10月对应参数为9 defaultDate: new Date(2021, 9, 18) })
- 方案3:改用
TextBoxFor手动指定value
如果你不需要EditorFor的自动类型适配逻辑,也可以改用TextBoxFor,手动设置的value属性优先级更高:
@Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker", @value = "10/18/2021" })
注意该方案下如果模型StartDate已有赋值,仍然会优先使用模型值,若要强制使用自定义value,请确认控制器返回模型时未给StartDate赋值。
内容的提问来源于stack exchange,提问作者Steve Cross
相关产品推荐
相关产品推荐

