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
.net 设置所需属性的初始值_.net_Asp.net Mvc 3_Validation_Data Annotations - Fatal编程技术网

.net 设置所需属性的初始值

.net 设置所需属性的初始值,.net,asp.net-mvc-3,validation,data-annotations,.net,Asp.net Mvc 3,Validation,Data Annotations,使用数据注释为模型指定验证规则,我希望为所需属性设置初始值,以便在该值等于该值时失败。这是使用验证控件的webforms中的一个选项,但我没有看到使用数据注释的类似选项 如果没有内置的方法,我可能只会构建一个从中继承的新的必需属性 更新:根据评论/答案,我肯定知道这不是一个理想的情况,我应该使用HTML5的占位符属性。但是,我需要对已经以非理想方式添加了阴影文本的现有表单执行此操作。在MVC中,我不会处理此问题,我会努力使阴影文本不与表单一起发布。HTML5有“占位符”。我会使用它或实现类似的功

使用数据注释为模型指定验证规则,我希望为所需属性设置初始值,以便在该值等于该值时失败。这是使用验证控件的webforms中的一个选项,但我没有看到使用数据注释的类似选项

如果没有内置的方法,我可能只会构建一个从中继承的新的必需属性


更新:根据评论/答案,我肯定知道这不是一个理想的情况,我应该使用HTML5的占位符属性。但是,我需要对已经以非理想方式添加了阴影文本的现有表单执行此操作。

在MVC中,我不会处理此问题,我会努力使阴影文本不与表单一起发布。HTML5有“占位符”。我会使用它或实现类似的功能:

查看以下内容,了解一种在非html5浏览器中正常降级的简单快速占位符方法:


只需将占位符属性添加到文本框中,并使用该javascript使其工作,而不管HTML版本如何。

我不知道是否有任何内置注释可用于notequalto,但您可以创建自己的
NoteQualatAttribute
,继承
ValidationAttribute
(用于在服务器上进行验证)并实现
iclientvalidable
(用于生成
数据某物
标记,用于在客户端进行验证)

您还必须在jquery中编写代码以进行客户端验证

参考此


我最终创建了一个从RequiredAttribute继承的新属性:

public class RequiredWithInitialValueAttribute : RequiredAttribute
{
    public string InitialValue { get; set; }

    public RequiredWithInitialValueAttribute(string initialValue)
    {
        InitialValue = initialValue;
    }

    public override bool IsValid(object value)
    {
        if (value.ToString().SafeEquals(InitialValue)) return false;
        return base.IsValid(value);
    }
}
仍然很好奇是否有更好的方法,因为这似乎是应该内置的,但现在我正在使用它。

不要这样做。 占位符文本不是值。不应发布它。不应验证它。
这与常识相悖,是一种危害人类罪,并带来了几个问题

  • 如果需要带有占位符文本的可选数字字段,该怎么办?
    (由于占位符是字符串,验证将失败。)

  • 应用程序本地化后会发生什么情况?
    (验证将失败,直到有人发现正在与此属性值进行比较。)

  • 验证必须仅限于服务器,无法“灰显”占位符文本。
    (除非在脚本文件中再次指定占位符并监视更改事件。)

  • 您必须至少在不同的位置指定此“占位符”两次。
    (如果我没弄错的话,它在属性和构造函数中各有一次。)

  • 占位符无法实际作为值。
    (如果不针对此字段,则针对使用该属性的任何其他字段,都可能发生这种情况。)

  • 这会让未来的维护人员感到非常害怕。
    (你怀疑吗?)

相反 使用
占位符
属性和降级解决方案

作为不安用户的替代方案,将标签放置在
div
中,并使用自己的JavaScript将其放置在输入字段上。这就是所谓的技术,web上有很多示例。(但您必须在您想要支持的浏览器上彻底测试您的解决方案。)您甚至可以推出自己的:


(这完全是我编造的,由你来实施。)

你在寻找不等于的东西吗?是的。我的文本框中有显示字段名称的阴影文本,但如果文本框的发布值等于阴影文本,我希望验证失败。我同意不应该发布阴影文本,但我认为在这种情况下检查服务器端也是值得的javascript失败或其他一些客户端失败。好吧,但是你会将你的模型/控制器代码紧密耦合到你在视图中使用的任意字符串值。这有点违背MVC范式。我同意。不喜欢这样紧密耦合,但只是试着快速修复。然而,这不是一个类似的例子吗r耦合作为显示器(Name=“xyz”)属性?由于显示名称用于构建与阴影文本具有相同用途的标签,它会不会类似?特别是如果我使用显示名称创建阴影文本,然后从显示名称中提取所需属性的初始值?由于时间限制,可能不会这样做,但只是从理论上考虑嗯,从MVC的角度来说,视图可以使用关于模型的信息。因此,在这种情况下,视图将关闭模型的显示属性。但是,如果您将该值传递回控制器,并使控制器具有过滤规则,这是有问题的。如果有人在一年内维护您的代码从现在起,当他们更改显示属性的值时,没有任何约定告诉他们查看控制器的保存操作以确保他们没有破坏某些内容。基本上,这些约定是为了可维护性而存在的。虽然我对您的努力表示赞赏,但这种策略完全是错误的。占位符纯粹是一种视图,它是s与模型或验证无关。将其视为一个覆盖,而不是一个真正的“值”好的。当你需要一个带有字符串占位符的数字字段时,你会怎么做?你需要小心验证你的初始值。你需要本地化你的应用程序的时间呢?我使用的地方是一个不会被本地化的短期表单。我只是需要一个基于我的前端开发的快速方法来实现这一点oper构建了HTML。将来可能会使用占位符。这不是一个长期或永久的解决方案。它只是修复一个exi
@Html.PlaceholderFor(m => m.SomeField)