【问题标题】:Remote Validation Fails When Annotating Complex Types注释复杂类型时远程验证失败
【发布时间】:2011-04-21 18:42:33
【问题描述】:

我的问题类似于:

Compound View Model object causing remote validation failure

我的模型:

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    [Remote("CheckZip", "Validation")]
    public string PostalCode { get; set; }
    public string Country { get; set; }
}

public class OrderViewModel
{
    public Address ShippingAddress { get; set; }
    public Address BillingAddress { get; set; }
    public string OrderItem { get; set; }
    public string OrderQuantity { get; set; }
}

呈现的 HTML 创建字段 ShippingAddress_Postalcode 和 BillingAddess_PostalCode。

CheckZip 操作:

public ActionResult CheckZip (string PostalCode)
{
    ...
}

这当然不起作用,因为没有发送 PostalCode,而是发送了 ShippingAddress_Postalcode 或 BillingAddess_PostalCode。如何使用相同的 CheckZip 操作来处理多个属性中存在的相同子属性?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 validation


    【解决方案1】:

    CheckZip 应采用地址而不是字符串,然后检查该地址的邮政编码属性。

    public ActionResult CheckZip (Address addressToCheck){    ...}
    

    【讨论】:

    • 如何标记 HTML 以使 CheckZip 获取地址?还是会使用绑定属性在控制器上完成工作?我的视图现在看起来像: model.ShippingAddress.PostalCode)%>
    • 工作应该在控制器中完成。如果您正确命名参数,则可以避免使用 bind 属性。我会查看远程验证触发时返回的查询字符串,这为您提供了一个很好的线索,了解您应该如何构建您的方法以使其正确绑定。
    • 似乎让 CheckZip 获取地址会产生同样的问题,因为查询字符串仍会向 CheckZip 发送不同的名称(ShippingAddress 或 BillingAddress)。 Bind 属性有一个 Prefix 参数,用于向查询字符串名称添加前缀。为了重用 CheckZip 操作,我需要一些删除前缀的方法。
    • 这很复杂,因为我无法使用 HtmlHelper 设置 Name 属性,因为它似乎是发送到操作的名称。
    • 最简单的解决方案可能是必须包装您调用的方法,最终调用一个实际执行验证工作的方法。您可以命名每个包装方法中的参数以匹配 ShippingAddress 和 BillingAddress。
    【解决方案2】:

    你可以尝试如下: 在控制器中,添加两个方法,

    [ActionName("CheckZip")]
    public ActionResult CheckZip (Address ShippingAddress)
    {
        ...
    }
    
    [ActionName("CheckZip")]
    public ActionResult CheckZip1 (Address BillingAddress)
    {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2015-04-19
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多