在MVC4页面中,将“禁用的DateTime”字段标记为必需

亚历克斯

我的一个模型包含一个看起来像这样的属性

private Nullable<DateTime> myDate;

[Display(Name = "My Date")]
[Editable(false)]
// [DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}", ApplyFormatInEditMode = true)]
public DateTime MyDate
{
    get { return this.myDate?? new DateTime(1, 1, 1); }
    set { this.myDate = value; }
}

// [DataType(DataType.Date)] 之所以被注释掉是因为这是我做过的一些实验的结果。

在我的“编辑”视图中,我像这样渲染属性

// input.noborder { border: 0 none; }
@Html.EditorFor(model => model.MyDate, new { @readonly = true, @class = "noborder" })
@Html.ValidationMessageFor(model => model.InvoiceDate)

我没有EditorTemplate为DateTime类型创建一个最后,在同一视图的脚本中,我附加jQuery Datepicker

var $dpMyDate = $('[name=MyDate]');
$dpMyDate.datepicker();

我基本上想呈现一个只读datepicker(下一步将是实现更多脚本,如果满足某些条件,它将启用它)。

一切似乎都正常,但是单击“保存”按钮时,验证告诉我该字段是必填字段,但我希望不是必须的,因为我没有将[Required]属性放在类中。另外(但这可能只是我的假设太多),感觉很奇怪,需要一个只读输入字段(应该如何填充它?)

我没有发现代码有什么问题,我缺少什么吗?

iu

通过阅读注释,您似乎无法通过ASP.NET MVC添加的javascript验证。问题是,尽管您的私有字段可为空,但该属性为不可为空(DateTime是一个结构)。ASP.NET MVC绑定到该属性,并得出结论,即使未将其标记为,它也是“必需的” [Required]

结果,ASP.NET MVC将生成javascript,就好像它被标记为[Required]属性一样。特别是,您使用EditorFor(),因此javascript ASP.NET MVC注入将根据需要对其进行处理。由于这是一个只读表单元素,因此我相信javascript会抱怨。

解决此问题的方法是使用DisplayFor()不附带该javascript的。

请注意,如果您有一个空的属性,[Required]但又不希望它可编辑,那么除了使用-实际上,您还需要做一些额外的事情-您需要在ASP的HTTP请求中DisplayFor()提交一些内容。 NET MVC知道如何对绑定进行建模。最受欢迎的选项是带有的<input>元素type=hidden因为用户对他发送到服务器的HTTP请求具有绝对的控制权,所以您可能希望忽略提交的值以防止“过度发布”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MVC4中的双语404页面

将一篇文章标记为“精选”以显示在Drupal 7的分类登陆页面中

ASP.NET MVC4页面在Microsoft Azure上的加载速度非常慢

MVC3在不需要时将标记为可为空的布尔值标记为必需

如何从Spring MVC输入angular4页面

在 Django ModelSerializer 中无法将所需的字段标记为 false

在Spring MVC示例中找不到404页面

A4页面,例如html中的布局

DispatcherTimer.Start()'必须声明一个主体,因为在MVC4中未将其标记为抽象,外部或局部

传递null = True后,将禁用字段标记为必填

同一页面中的HTML5 Mutliple <地址>标记

ASP.NET MVC4中页面的网址

在 MVC4 剃刀页面中自动回发

ASP.NET MVC 4自定义404页面

必填字段在mvc4中不起作用

对mvc4中的隐藏字段应用远程验证

带srcdoc的iframe:同一页面链接将框架中的父页面加载

在vuepress中更改404页面

在Magento中翻译404页面

如果对MVC4中的两个变量进行条件验证,则为必需

为什么fork()将两个进程中的每个页面都标记为只读?

fork 函数将两个进程中的每个页面都标记为只读?

为什么此具有必需属性的电子邮件输入字段未通过W3C验证?(html5页面)

在不可变类中,为什么将字段标记为私有?

在.NET世界中“将字段标记为文字”是什么意思?

如何在Spring MVC应用程序中运行Angular 2页面?

MVC6中的自定义选择性404页面

JQuery Datatable在同一页面MVC中的多个表

在剃须刀MVC3页面中调用Partial Aspx