Asp.net 在MVC3编辑器模板中获取验证属性
我正在编写一个编辑器模板,用于输入由三个字段组成的日期和时间Asp.net 在MVC3编辑器模板中获取验证属性,asp.net,asp.net-mvc-3,mvc-editor-templates,Asp.net,Asp.net Mvc 3,Mvc Editor Templates,我正在编写一个编辑器模板,用于输入由三个字段组成的日期和时间 带有jQuery UI日期选择器的文本框 用于输入时间的文本框 通过javascript使用完整的日期和时间字符串更新的隐藏输入 其思想是为用户显示单独的日期和时间字段,而只有一个字段绑定到模型。无论何时更改显示的字段,都会通过JavaScript更新隐藏字段 @model System.DateTime? <span class="datetime-editor"> <input class="datepick
- 带有jQuery UI日期选择器的文本框
- 用于输入时间的文本框
- 通过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>
我的问题是验证属性。它们都存在于隐藏的输入标记中:
<input name="StartDateTime" id="StartDateTime" type="hidden"
data-val-required="Start date and time are required" data-val="true" value=""/>
我想以某种方式获取生成的
数据val*
属性,并将它们添加到可见的输入中。通过ViewData.ModelMetaData
我可以确定该字段是否为必填字段,但随后我必须重新设计逻辑以创建data val required
属性。我希望获得生成的属性。如果您想要HTML5数据-*验证属性,可以使用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" }
}
)
我试图做类似的事情;IDE真的会把你引入歧途 如果您想知道模型上的属性是否是必需的,您有时不会询问
[required]
属性,而是询问它是否可以为null。例如:
public class MyModel
{
public int Number1 { get; set; }
public int? Number2 { get; set; }
}
两者都将使用EditorTemplates\Int32.cshtml
在编辑器模板中,您可以使用:
@model System.Int32?
<input id=@Html.IdForModel() @(Model is Nullable ? "" : "required") />
@model System.Int32?
请注意,
@model System.Int32
之后的问号(使其可为空)是必要的,如果您不希望IDE在检查是否可为空时抱怨,则应注册适配器以提供客户端验证:
我看不出你的两个输入字段有什么意义。他们没有名字。它们的值永远不会发送到服务器。你为什么需要它们?我看到第一个是只读的。您希望对只读字段进行什么验证?@DarinDimitrov:我正在使用JavaScript将完整的日期和时间值复制到隐藏的输入中(请参阅我的更新)。因此您需要对第二个字段进行验证,因为第一个字段是只读的?更准确地说,您需要什么样的验证?第一个字段是只读的,以防止用户手动输入日期,但当用户从日期选择器中选择日期时,它将被更新。如果模型中的DateTime
字段标记为[必需]
我希望两个输入都具有数据val Required
属性。如果模型元数据具有IsRequired=true
,则可以在某些地方创建datavalrequired
属性。我想重复使用这个逻辑。谢谢!GetUnobtrusiveValidationAttributes()
是我需要的方法,但找不到。返回一个空计数给我。为什么?@IsaaClopis,您的视图模型是否装饰有验证属性?是的。有一些验证属性是预设的和自定义的验证属性,但都是从现有的验证属性继承而来的。@Darin wOw O_O。正是我要找的。Anders编辑得不错;(离题)奇怪的是,我不能对编辑进行投票。
@model System.Int32?
<input id=@Html.IdForModel() @(Model is Nullable ? "" : "required") />