Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在MVC3编辑器模板中获取验证属性_Asp.net_Asp.net Mvc 3_Mvc Editor Templates - Fatal编程技术网

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使用完整的日期和时间字符串更新的隐藏输入
其思想是为用户显示单独的日期和时间字段,而只有一个字段绑定到模型。无论何时更改显示的字段,都会通过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") />