[英]asp .net MVC 2.0 Validation
我正在嘗試為我的應用程序在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:") %>
兩者看起來相同,不同之處僅在於驗證summaryID(validationSummary1,validationSummary2)。 這兩個控件都呈現在一頁上:
Form2
<%Html.RenderPartial("~/Views/Test/ValidFormControl2.ascx", null); %>
Form1
<%Html.RenderPartial("~/Views/Test/ValidFormControl.ascx", null); %>
驗證屬性
第一個問題,當我們有兩個具有相同類型的控件來驗證它不起作用時,因為html元素由字段名稱呈現(因此,我們有兩個元素具有相同的名稱“ Password”)。 客戶端只會驗證第一個表格。 最糟糕的是,即使我們具有不同的類型並且它們的字段名稱相同,驗證也無法正常工作(這是我需要修復的事情,為某些唯一的驗證屬性命名是愚蠢的)。
有什么解決辦法嗎?
自定義屬性驗證
接下來的事情是自定義屬性驗證(所有這些錯誤都是當我使用Ajax進行常規表單驗證時沒有問題。):
CompareTo-簡單的比較是在帳戶模型的mvc模板中完成的(將對具有兩個屬性的類屬性進行比較),並且該頁面未顯示。 為此,我使用compareRule和我的Attribute創建了自己的CachingRulesProvider。 也許有更簡單的方法來做到這一點?
具有最小和最大值的StringLenght,我不會描述我是如何做到的,但是有什么容易的乳清嗎?
驗證摘要
當頁面上有兩個兩個控件時,所有摘要驗證信息都轉到第一個控件驗證摘要元素,即使xval生成的腳本都說elementID對於摘要而言是不同的。 有人知道如何修理嗎?
驗證信息
是否有任何選項可以在Html.ValidationMessageFor(model => model.ConfirmPassword)的地方打開消息。 Becsoue對我來說沒有出現。 我也想擁有摘要和近場信息,而不僅僅是紅色邊框。 有人知道怎么做嗎?
Ajax提交
任何人都知道如何在沒有大量javascript代碼的情況下輕松完成通過javascript提交的工作。 這將用於更改提交到href元素(a)的輸入。 兩者看起來相同,不同之處僅在於驗證summaryID
首先,我不知道為什么要有兩個控件,兩個相同的字段,一個表單。 每個表單應具有自己的模型,並使用模型作為驗證器。
名稱空間Sample.Models {[metatype(typeof(PersonaValidation))]公共部分類Person {}公共類PersonValidation {[Required(ErrorMessage =“ First Name Required”)] [StringLength(20,ErrorMessage =“名字必須為20或長度少於字符“)] [DisplayName(”名字“)]公共字符串名字{get; 組; }
[Required(ErrorMessage = "Last name Required")]
[StringLength(20, ErrorMessage = "Last name must be 20 or less characters in length")]
[DisplayName("Last Name")]
public string Lastname { get; set; }
}}
在aspx中,在form標簽之前添加以下腳本文件:
<h2>Validation Sample</h2>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<div class="editor-label">
<%= Html.LabelFor(model => model.Firstname) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Firstname) %>
<%= Html.ValidationMessageFor(model => model.Firstname) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Lastname) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Lastname) %>
<%= Html.ValidationMessageFor(model => model.Lastname) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
這將每次都起作用。 錯誤消息將顯示在無效字段旁邊。
關於ajax提交,您可以在表單上放置一個按鈕,然后通過jQuery單擊它。 這也將導致您的表單被發布。
您也可以僅對控制器操作進行ajax調用(單擊鏈接時),然后在此處從表單中發布必要的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.