【发布时间】:2010-05-27 14:56:59
【问题描述】:
我正在尝试在 asp .net MVC 2.0 中为我的应用程序做一些验证。我想要一些不错的客户端验证。验证应在模型端使用具有自定义属性(如 CompareTo、StringLenght、MinPasswordLenght(来自 Membership.MinimumumpassworkdLenght 值)的 DataAnnotations 完成。 为此,我尝试将 xval 与 jquery.validation 一起使用。 一些具体的事情是大多数表单都将使用 ajax,而大多数问题是当我想使用 ajax 验证表单时。
这里是示例项目http://www.sendspace.com/file/m9gl54的链接。
我有两个表单作为控件ValidFormControl1.ascx,ValidFormControl2.ascx
<% using (Ajax.BeginForm("CreateValidForm", "Test", new AjaxOptions { HttpMethod = "Post" })) {%> <div id="validationSummary1">
<%= Html.ValidationSummary(true)%> </div> <fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.Name)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Name)%>
<%= Html.ValidationMessageFor(model => model.Name)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Email)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Email)%>
<%= Html.ValidationMessageFor(model => model.Email)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Password)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.ConfirmPassword)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</div>
<p>
<input type="submit" value="Create" />
</p> </fieldset> <% } %> <%= Html.ClientSideValidation<ValidModel>()
.UseValidationSummary("validationSummary1", "Please fix the following problems:") %>
两者看起来一样,区别只是验证摘要ID(validationSummary1,validationSummary2)。两个控件都呈现在一个页面上:
Form2
<%Html.RenderPartial("~/Views/Test/ValidFormControl2.ascx", null); %>
Form1
<%Html.RenderPartial("~/Views/Test/ValidFormControl.ascx", null); %>
验证属性
第一个问题,当我们有两个具有相同类型的控件来验证它不起作用时,因为 html 元素是按字段名称呈现的(所以我们有两个具有相同名称的元素“密码”)。只有第一个表单将由客户端验证。 最糟糕的是,即使我们有不同的类型并且它们的字段名称相同,验证也不起作用(这是我需要修复的东西,为验证命名一些独特的属性会很愚蠢)。
有什么解决办法吗?
自定义属性验证
接下来的自定义属性验证(所有这些错误都是当我使用 Ajax 进行正常表单验证时没有问题。):
CompareTo - 简单的比较是在 mvc 模板中为帐户模型完成的(类属性说与两个属性将被比较),它没有显示在页面上。为此,我使用 compareRule 和我的属性创建了自己的 CachingRulesProvider。也许有更简单的方法来做到这一点?
StringLenght 具有最小值和最大值,我不会描述我是如何做到的,但是有没有简单的乳清呢?
验证摘要
当我在页面上有两个两个控件时,所有摘要验证信息都会转到第一个控件验证摘要元素,即使 xval 生成的脚本说摘要的 elementID 也是不同的。有人知道怎么修吗?
验证信息
是否有任何选项可以在 Html.ValidationMessageFor(model => model.ConfirmPassword) 的位置打开消息。因为对我来说它没有出现。我也想获得摘要和近场信息,而不仅仅是红色边框。有人知道怎么做吗?
Ajax 提交
任何人都知道如何在没有大量 javascript 代码的情况下轻松通过 javascript 提交。这将用于将输入提交更改为 href 元素 (a)。 两者看起来一样,区别只是验证摘要ID
【问题讨论】:
-
这里有很多有效的问题。 SO更适合单个问题。可能值得将这些问题分解并重新发布以获得答案。
标签: c# .net asp.net-mvc asp.net-mvc-2