如何为Html.DateTimePickerFor添加占位符?是否需自定义控件?
解决DateTimePickerFor占位符不显示的问题
大部分内置或第三方的DateTimePickerFor辅助方法,默认不会直接将placeholder属性传递到底层的<input>元素,所以直接通过htmlAttributes传参不会生效,但不一定需要重新创建自定义控件,可按以下方式处理:
检查所用DateTimePicker的参数要求
部分第三方Mvc扩展库(比如Bootstrap DateTimePicker的相关封装),需要通过特定配置项或data-*属性设置占位符,而非直接传placeholder。比如有些库需要用data-placeholder替代,或者在配置对象里指定占位符字段,具体参考你所用库的文档。手动渲染input并绑定插件
放弃直接用DateTimePickerFor,改用TextBoxFor绑定模型,再手动初始化DateTimePicker插件,这样就能正常设置占位符:<div> @Html.TextBoxFor(model => model.Date, new { placeholder = "Is required", @class = "datepicker" }) </div> <script> // 替换成你实际使用的DateTimePicker初始化代码 $(function() { $('.datepicker').datetimepicker(); }); </script>自定义DateTimePickerFor扩展方法
如果想统一使用辅助方法,可以自己编写扩展,确保placeholder等html属性被正确传递到生成的input元素中。示例C#代码:public static MvcHtmlString DateTimePickerFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) { var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); // 生成带所有属性的TextBox var textBox = html.TextBoxFor(expression, attributes); // 可添加DateTimePicker所需的容器或额外属性 var container = new TagBuilder("div"); container.AddCssClass("datetime-picker-wrapper"); container.InnerHtml = textBox.ToString(); return MvcHtmlString.Create(container.ToString()); }自定义后,原调用方式的
placeholder就能正常生效了。
内容的提问来源于stack exchange,提问作者Wiesław Śruta
相关产品推荐
相关产品推荐

