首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >地址字段的自定义ASP.NET MVC验证摘要

地址字段的自定义ASP.NET MVC验证摘要
EN

Stack Overflow用户
提问于 2009-11-29 08:31:01
回答 5查看 4.1K关注 0票数 4

我试图找出验证一个页面签出的最佳方法。它包括:

  • 船舶地址
  • 记帐地址
  • 等。

Address类显然包含First NameLast NameStreet1Street2CityStateZipPhone等。

假设用户在输入任何内容之前单击“OK”--那么您最终会出现十几个或更多的验证错误,这会给您带来一大块看起来很难看的红色文本。

我想验证地址作为一个单一的实体,并提供一个智能错误-如‘不完整的地址’,或更具体的错误,在适当的时候。但我仍然希望能够突出每个有问题的领域。我现在看不出这么简单的方法,因为很明显,Html.ValidationSummary助手将显示每个字段。

因此,我想将摘要显示为:

代码语言:javascript
运行
复制
 "Your shipping address is incomplete"

并在红色ZipCity中突出显示。

我想我必须做一个完全定制的ValidationSummary,甚至是一个完全定制的数据结构。

做任何验证框架都可以使这样的总结更容易做,其中总结应该显示一个智能摘要,而不仅仅是每个单独的字段错误。

编辑: MVC 2 RC 现在支持模型级错误.

ValidationSummary现在支持只显示模型级错误的重载。如果您在每个表单字段旁边内联地显示验证消息,这是非常有用的。以前,这些消息将在验证摘要中重复。通过这些新的更改,您可以让摘要显示一个总体验证消息(例如。(“表单提交中有错误”)以及不适用于特定字段的验证消息列表。

有人拿到了如何做这件事的实际样本吗?

EN

回答 5

Stack Overflow用户

发布于 2009-12-29 05:37:26

您可以使用复合地址属性并将整个地址验证为一个单元:

代码语言:javascript
运行
复制
public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string Zip { get; set; }
}

public class Order
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [AddressRequired("Your shipping address is incomplete")]
    public Address ShipTo { get; set; }

    [AddressRequired("Your billing address is incomplete")]
    public Address BillTo { get; set; }

    // you could do this if you still need 1:1 mapping for model binding
    public string ShippingCity
    {
        get { return ShipTo.City; }
        set { ShipTo.City = value; }
    }
}

验证属性如下所示:

代码语言:javascript
运行
复制
public class AddressRequiredAttribute : ValidationAttribute
{
    ...

    public override bool IsValid(object value)
    {
        var address = value as Address;

        if (address != null)
        {
            ...
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2009-11-29 15:10:33

IDataErrorInfo有两个成员:

  • 错误-获取一条错误消息,指示此对象的错误所在。
  • 项-获取具有给定名称的属性的错误消息。

如果您实现了Error成员,您将得到一条错误消息。

票数 1
EN

Stack Overflow用户

发布于 2009-11-29 15:30:04

在最近的一个项目中,我处理了一个类似的问题,我做了一个自定义验证摘要,下面是代码:

代码语言:javascript
运行
复制
<%
      if (!ViewData.ModelState.IsValid)
       {
           Response.Write("<div class=\"prepend-1 span-10 last notice\">");
           Response.Write("<span>Please fix fields marked with an asteristk <span class=\"ss_sprite ss_asterisk_orange\"> </span></span>");
           Response.Write("<ul>");
           foreach (KeyValuePair<string, ModelState> keyValuePair in ViewData.ModelState)
           {
               foreach (ModelError modelError in keyValuePair.Value.Errors)
               {
                %>
                <li><%= Html.Encode(modelError.ErrorMessage)%></li>
                <%
       }
           } Response.Write("</ul>");
           Response.Write("</div>");
       }
    %> 

我是在一个部分视图中这样做的,但也许最好用Helper方法包装,就像原始的ValidationSummary一样。

在内部,您可以检查任何特殊和独特的要求。希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1815005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档