我的问题是相似的:远程验证失败时诠释复杂类型
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操作来处理多个属性中存在的相同子属性?
我将如何标记HTML并CheckZip采取的地址?或者使用绑定属性在控制器上完成工作?我现在的看法如下所示:<%= Html.TextBoxFor(model => model.ShippingAddress.PostalCode)%> – 2011-04-21 20:07:13
该工作应该在控制器中完成。如果您正确命名参数,则可以避免使用绑定属性。在远程验证触发时,我会查看返回的查询字符串,这为您提供了一个很好的线索,说明如何构建您的方法,以便它能够正确绑定。 – 2011-04-21 21:58:07
似乎有CheckZip采取地址会产生相同的问题,因为查询字符串仍将发送不同的名称(ShippingAddress或BillingAddress)到CheckZip。 Bind属性具有Prefix参数,该参数为查询字符串名称添加前缀。我需要一些删除前缀的方式才能重用CheckZip操作。 – 2011-04-22 13:54:01