【问题标题】:asp.net 4.5 webforms model binding : client side validation supported?asp.net 4.5 webforms 模型绑定:支持客户端验证?
【发布时间】:2013-11-24 08:52:07
【问题描述】:

我是使用数据注释的 asp.net 4.5 webforms 模型绑定的忠实粉丝。

ascx:

     <asp:FormView ItemType="Contact" runat="server" DefaultMode="Edit" 
     SelectMethod="GetContact" UpdateMethod="SaveContact">
        <EditItemTemplate>   

              <asp:ValidationSummary runat="server" ID="valSum" />

              Firstname: <asp:TextBox  runat="server"  ID="txtFirstname" Text='<%#: BindItem.Firstname %>' /> 


              Lastname: <asp:TextBox  runat="server"  ID="txtLastname" Text='<%#: BindItem.Lastname %>' />

              Email:  <asp:TextBox  runat="server"  ID="txtEmail" Text='<%#: BindItem.Email %>' />     

              <asp:Button ID="Button1"  runat="server" Text="Save" CommandName="Update" />
        </EditItemTemplate>   
    </asp:FormView>

.cs:

    public void SaveContact(Contact viewModel)
    {
        if (!Page.ModelState.IsValid)
        {
            return;
        }            
    }              

    public Contact GetContact() 
    {
         return new Contact();
    }

型号:

    public class Contact
    {
        [Required]
        [StringLength(10, ErrorMessage="{1} tis te lang")]   
        public string Firstname { get; set; }

        [Required]
        [StringLength(10)]
        public string Lastname { get; set; }

        [Required]
        [EmailAddress]       
        public string Email { get; set; }

    }

问题:

像 MVC 这样的 web 表单是否支持开箱即用的客户端验证? 或者我们应该依赖第三方库(DAValidation)。是否可以将 Html.EnableClientValidation() 的优点移植到 webforms 中?

问候,

巴特

【问题讨论】:

  • 我猜你必须使用不显眼的验证见这里:codeguru.com/csharp/.net/net_asp/…
  • 嗨,Sam,目前根本没有客户端验证(不引人注目)。提到的链接在 ascx 中使用 requiredfieldvalidator 的 / 正则表达式验证器。我想避免在 2 个地方指定验证规则(数据注释模型 + ascx)。客户端验证应该建立在模型上指定的注释的权利。巴特
  • 很遗憾,数据注释属性的客户端验证不可用(但它可用于带有DynamicValidator 的服务器端)。您可以编写自己的验证器,也可以使用我前段时间编写的验证器 - davalidation.codeplex.com
  • Guys webforms 有完整的客户端验证,只需要在模型中指定一次,这就是模型绑定和 DataAnnotations 的重点,请在下面查看我的答案

标签: asp.net webforms data-annotations model-binding client-side-validation


【解决方案1】:

正如我们在 ASP.NET WebForms 项目中发现的那样,对于客户端验证,模型的验证属性没有总体上有用的重用。

例如,联系人数据模型具有各种属性,如姓名、电子邮件、生日等......并不总是以相同的方式使用。有时它可能有一些必填字段,有时没有,甚至在应用程序的各个点上,所需的输入数据也可能不同。

因此,在我们的项目中,我们同时使用客户端验证实现和模型属性。

我们应用的总体思路是:

  • 在客户端,我们希望尽可能具体,以避免不必要的回发,并为用户提供即时、具体的响应。
  • 在服务器端,我们应用模型属性以及更多的数据库和面向业务的验证规则,但并没有那么具体地失败。此外,如果需要,当某些字段相互依赖时,确实会进行一些“属性间”验证。

对于客户端,我们选择了 jQuery Validate Plugin (http://jqueryvalidation.org/)。

我们甚至构建了自己的一组控件(派生自内置 WebControls),它们呈现各种(甚至一些自定义)数据规则。

【讨论】:

    【解决方案2】:

    Guys webforms 有完整的客户端验证,它只需要在模型中指定一次,这就是模型绑定和数据注释的重点,请查看下面的这些链接。 简而言之,将以下引用添加到您的模型类库项目中。 using System.ComponentModel.DataAnnotations;

    将此行添加到您的 web.config

    <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms"/>
    

    点击此链接了解详情Webforms Model Validation

    还有微软完整文档的链接Microsoft documentaion

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多