2010-08-27 50 views
0
  1. 考虑经典的例子:在下拉产品 和类别
  2. 编辑产品
  3. 类别的标识是 选择 - 类别映射 为对象,具有空 除ID的所有领域
  4. 提交产品编辑表单时 - 验证提供了一个错误:“类别 名称是必需的”(我需要 属性的类别名称属性)

如何与这样的错误处理,如果我想使用内置的验证(if (!ModelState.IsValid))? 编写自定义数据绑定程序,可以使用数据库中的值填充所有这些只有id的对象。asp.net的MVC:结合复合物

你有这个问题的任何其他解决办法?

+0

你不应该发表任何类别背部采用了产品编辑表单,仅在产品类别ID。我们可以看到一些代码吗? – madcapnmckay 2010-08-27 10:14:18

+0

我同意你的意见。但是,在验证绑定的Product对象时,asp.net mvc绑定机制会将Product.Category的所有必需字段映射为存在。我相信我需要填写的地方绑定和验证 – kilonet 2010-08-27 10:20:18

回答

1

您需要将您的回修改后的产品和类别ID。然后在你的控制器/仓库中从传入的类别id中获取类别,并将该类别设置为产品类别。

正如所以你不应该得到“分类名称是必需的”类别从数据库(或地方)返回的所有属性应该是propulates

的我是什么意思一个简单的例子:

[HTTPost] 
public ActionResult Save(Product product, int? categoryId) 
{ 
    Category category = GetCategory(categoryID); 

    product.Category = category; 

    if (ModelState.IsValid) 
    { 
    // Save etc. 
    } 
} 
+0

没有真正我想要的东西之间的类别属性:我仍然手动每个控制器动作绑定的对象。我想过可用于所有对象的通用绑定器。但它毕竟是一个可接受的解决方案 – kilonet 2010-08-27 10:50:51

+0

只是检查你的代码:遗憾的是它不工作:ModelState中仍然是IsValid的您是否正在使用实体框架,NHibernate的或别的东西装类别 – kilonet 2010-08-27 11:01:05

+0

后!如果你想要通用的模型绑定你应该看看http://automapper.codeplex.com/ - 这将您的用户界面映射到对象。当您在检查模型状态之前尝试调试您的应用程序时,会发生什么情况?是否填充了类别? – lancscoder 2010-08-27 12:10:13