Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Javascript 在元素上设置验证样式_Javascript_Jquery_Asp.net_Asp.net Mvc_Jquery Validate - Fatal编程技术网

Javascript 在元素上设置验证样式

Javascript 在元素上设置验证样式,javascript,jquery,asp.net,asp.net-mvc,jquery-validate,Javascript,Jquery,Asp.net,Asp.net Mvc,Jquery Validate,在我的表单上,我有一个强类型化到viewmodel的隐藏元素,然后我有一个“虚拟”文本框,用户将在其中输入将复制到隐藏元素值的值 剃须刀 @Html.HiddenFor(model => model.TestProperty) @Html.Editor("TestPropertyEmpty", new { htmlAttributes = new { @class = "form-control", @placeholder = "xxxx.x" } }) jQuery @section

在我的表单上,我有一个强类型化到viewmodel的隐藏元素,然后我有一个“虚拟”文本框,用户将在其中输入将复制到隐藏元素值的值

剃须刀

@Html.HiddenFor(model => model.TestProperty)
@Html.Editor("TestPropertyEmpty", new { htmlAttributes = new { @class = "form-control", @placeholder = "xxxx.x" } })
jQuery

@section scripts{
    @Scripts.Render("~/bundles/jqueryval")

    <script>

        //enable jQuery validation on hidden elements
        $.validator.setDefaults({
            ignore: []
        });


        $(document).ready(function() {

            $("#TestProperty").val(''); // clear value for validation purposes

            /* Created a 'dummy' textbox so that it will be empty on page load instead of using jQuery to clear the actual strongly-typed property
                because you can see the textbox being cleared on page load.  So once user enters value into dummy textbox then that value will be 
                the value for the actual model property that is hidden
            */
            $("#TestPropertyEmpty").blur(function() {
                $("#TestProperty").val(this.value);
                console.log($("#TestProperty").val());
            });

        });
    </script>
}
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
//对隐藏元素启用jQuery验证
$.validator.setDefaults({
忽略:[]
});
$(文档).ready(函数(){
$(“#TestProperty”).val(“”);//清除值以进行验证
/*创建了一个“虚拟”文本框,以便它在页面加载时为空,而不是使用jQuery清除实际的强类型属性
因为您可以看到文本框在页面加载时被清除。所以一旦用户在虚拟文本框中输入值,该值将被清除
隐藏的实际模型特性的值
*/
$(“#TestPropertyEmpty”).blur(函数(){
$(“#TestProperty”).val(此.value);
log($(“#TestProperty”).val());
});
});
}
目标

属性
TestProperty
是必需的,它是隐藏的,但是我仍然需要对它进行验证,因此
$(document).ready…
上面的代码片段启用了对隐藏元素的验证

但我的目标是当
TestProperty
为空时,用户尝试提交

我希望“虚拟”文本框以红色突出显示,因为实际属性是隐藏的?我如何做到这一点

另外,对于那些实际上与模型无关但用于我的示例中所述目的的元素,是否有一个名称

我不喜欢术语“虚拟元素”


然后,我可以编辑我的问题标题,以表示更好、更具信息性的风格。

您可以向输入添加必需的属性

<input id="TestPropertyEmpty" required />


瞧。如果没有帮助,请告诉我。

您可以在原始字段上使用
范围
验证规则来指定提交表单时字段的值必须大于0,而不是创建代理字段(为了显示空框而不是0.00,以便吸引用户的注意)。如果用户忽略该字段,他们将得到一个验证错误。这肯定比你现在要做的更简单更干净

这与您当前的设计是等价的,因为如果您不希望该字段为空,那么您实际上是在说(因为0存储在隐藏字段中)您不希望该字段为0,并且验证将具有相同的效果,因为它确保用户注意该字段。事实上,在您以前的方法中,用户可能会再次在框中写入0,这似乎是您不愿意让他们输入的值

属性
TestProperty
是必需的,它是隐藏的,但我仍然 需要验证吗

我已经就下面的主题写了一个答案,。阅读它,我希望它能帮助你

在某些情况下,您希望忽略对一个或多个对象的验证 客户端中的隐藏字段(并非所有隐藏字段),您也可以 希望验证它们和服务器端的其他隐藏字段


这是概念上的东西吗?为什么需要一个虚拟字段?文本框和隐藏字段都可以存储相同的信息。@ADyson这更像是强迫症。。虚拟字段的用途是不必使用
$(“#…).hide()
。因为如果我这样做..我可以看到
0.00
被隐藏在页面加载中..没什么大不了..但我想知道我所问的是否可能。为什么需要隐藏它?显示为空而不是0.00似乎有点复杂。这是严格必要的吗?如果字段是必需的,那么0是完全有效的value.为什么用户看不到?如果您希望他们设置不同的值,则通过设置字段值必须大于0@ADyson对不起,不是隐藏..而是
$(“#…).val(“”)
。。我不是想躲起来
0.00是允许的,我不希望在页面加载时加载该值,因为有些用户会忽略它,因为它有一个值。好的,但我会提出与我上次评论完全相同的观点,只需将“隐藏”一词替换为“空白”。这种方法会产生额外的错误消息。我已经在验证模型属性,
TestProperty
。。如果这是空的,那么我会得到错误信息。如果我尝试您的方法,我会收到一条额外的验证消息,
此字段是必需的
。是的,我知道,这只是另一个需要解决的解决方法。我会回来提供更好的解决方案谢谢!快速提问。。首先使用EF代码时。。是否有数据批注,允许十进制属性的小数点后仅包含1位数字?在SQL中,用于
TestProperty
。。它是十进制(18,2)。。但是我想要(18,1)。。是否对此进行了数据批注,然后进行迁移和更新?这有帮助吗。您可以稍微更改表达式,只检查精度的小数点后1位。我不确定你是如何将其与你的EF实体联系起来的,你所说的“迁移和更新”到底是什么意思?您是使用DTO/ViewModels,还是直接使用EF实体作为模型?ViewModels for my view。。所以我想我不需要使用迁移。。也许regexpression可以工作。好奇的是,有关于代理字段的文章/文档吗?解释这个词的起源,等等?@GTown Coder我相信你知道,一般用法中的“代理”是指替代其他东西的东西。我并不是在具体的技术意义上使用它。