我正在编写一个编辑器模板,用于输入由三个字段组成的日期和时间。
这个想法是为用户显示日期和时间的单独字段,而只有一个字段绑定(bind)到模型。每当显示的字段发生变化时,隐藏字段都会通过 JavaScript 更新。
@model System.DateTime?
<span class="datetime-editor">
<input class="datepicker" value="@(Model.HasValue ?
Model.Value.Date.ToString() : string.Empty)" readonly="readonly"/>
<input class="time" value="@(Model.HasValue ?
Model.Value.TimeOfDay.ToString() : string.Empty)"/>
@Html.HiddenFor(d => d)</span>
用于设置日期选择器并将值复制到隐藏字段的 JavaScript。
$(".datepicker").datepicker();
$(".datetime-editor").find("input").change(function () {
var date = $(this).parent().find(".datepicker").val();
var time = parseTime($(this).parent().find(".time").val());
if (date != "" && time != null) {
$(this).siblings(".datetime-result").val(date + " " + time);
}
else {
$(this).siblings(".datetime-result").val("");
}
});
我的问题是验证属性。它们都存在于隐藏的输入标签中:
<input name="StartDateTime" id="StartDateTime" type="hidden"
data-val-required="Start date and time are required" data-val="true" value=""/>
我想以某种方式获取生成的
data-val*
属性并将它们添加到可见输入中。通过ViewData.ModelMetaData
我可以找出是否需要该字段,但是我必须重新发明逻辑来创建 data-val-required
属性。我想获取生成的属性。
最佳答案
如果您想要 HTML5 data-* 验证属性,您可以使用 HTML 帮助器来生成这些输入:
@{
var validationAttributes = Html.GetUnobtrusiveValidationAttributes("");
}
@Html.TextBox(
"",
Model.HasValue ? Model.Value.Date.ToString() : string.Empty,
new RouteValueDictionary(validationAttributes)
{
{ "class", "datepicker" },
{ "readonly", "readonly" }
}
)
@Html.TextBox(
"",
Model.HasValue ? Model.Value.TimeOfDay.ToString() : string.Empty,
new RouteValueDictionary(validationAttributes)
{
{ "class", "time" }
}
)
关于asp.net - 在 MVC3 编辑器模板中获取验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963813/