簡體   English   中英

ASP .NET MVC 2.0驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM