编辑:我现在正在为文本字段工作(请参阅问题下面的评论)。
但是,出于某种原因,验证并没有为我的下拉列表启动。
在我的ViewModel中,我有这个:
[Display(Name = "Country")]
[Required(ErrorMessage = "{0} is definitely required!")]
public int CountryId { get; set; }
在我看来,我有这个:
@Html.LabelFor(m => m.CountryId, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.CountryId, Model.CountryList, "—Select a country --",
new { @class = "form-control" })
<div class="container_voor_error">
@Html.ValidationMessageFor(m => m.CountryId, "", new { @class = "text-danger" })
</div>
</div>
我认为控制器中的代码不需要在这里给出,因为它工作正常:它用Country填充CountryList,然后在提交之后进行服务器端验证和处理,没问题。
所以场景是这样的:
然后我再次取消选择该选项,以便再次显示“ - 选择国家/地区”;
现在(懒惰的)客户端验证应该启动并导致错误消息:“国家肯定是必需的!”;
但是没有发生,没有显示错误信息。
所以......我忘了什么,或做错了什么?
END-OF-EDIT
我想,对于MVC / ASP.NET专家来说这是一个简单的问题。但是,由于我仍然在这个框架(学校课程)中找到自己的方式,这是我一直在想的事情,而且我还没有找到明确的答案。
关于表单输入的客户端验证,使用我的模型(或viewmodel)中的注释。我明白了,只要不满足一个或多个带注释的验证要求,表单字段的值就不会在提交时发送到服务器。而是再次显示相同的表单视图,这次显示适用的错误消息。当然,假设这些错误消息的HTML帮助程序(如Html.ValidationMessageFor)包含在表单字段中。到目前为止,非常好。
但是,有&#34;验证为你的类型&#34;。意味着在用户仍在键入时出现(和更改)错误消息,而不是在用户点击提交后仅出现在重新加载的表单上。这是我的问题:是&#34;验证 - 你是类型&#34;应该自动运作?因为互联网资源/教程似乎一般暗示(虽然几乎没有明确说明)。
但我的经验却与众不同:为了进行&#34;验证 - 你键入&#34;,我总是需要编写JavaScript / jQuery事件处理程序(例如keyUp()和onChange()) ,我在其中明确地调用
$('some-selector').validate().element('some-element');
所以我的问题是:对于每个待验证的表单元素,我必须对方法validate()进行这些显式调用是否正常?或者,在ASP.NET / MVC中,有一种方法可以实现自动&#34;验证 - 就像你一样&#34;对于视图表单上的所有元素(或者可能是元素的子集)?
感谢。
答案 0 :(得分:0)
不,ASP.NET MVC在您输入&#34;时不提供自动&#34;验证。在键入时进行&#34;验证&#34;它必须是javascript代码。默认情况下,ASP.NET Mvc使用 jQuery Validation 插件,此插件会对模糊事件进行验证,这与 keyup 事件不同
ASP.NET MVC所做的就是为元素渲染一些html属性,也称为不显眼的验证。如果您看到启用验证的页面源,然后禁用,则可以检查此项。然后有一个javscript库,它使用这些属性中的值来连接正确的事件。
最后,一个人也可以使用不同的插件/库,也可以改变ASP.NET向客户端发送验证的方式。