2010-07-19 72 views
0

我使用NHibernate,我有一个Campaign类,它有一个Client类作为其成员之一,我试图在我的[HttpPost] public Create (CreateCampaignViewModel vm)方法中使用ModelState.IsValid如何在复杂对象中使用ModelState.IsValid?

正如我的视图模型包含对象CampaignModelStats.IsValid永远是假的,因为我从形式而不是整个Client对象传递Client.Id

有没有办法让它加载客户端成员之前,它运行的验证代码,设置ModelState.IsValid?或者,在我手动检索基于ClientId的客户端对象并将其绑定到Campaign后,是否有刷新ModelState状态的方法?

回答

1

你可能想的属性添加到您的动作方法的参数,以禁用标识的结合:

[HttpPost] 
public Create([Bind(Ignore="ClientId")]CreateCampaignViewModel vm) 
0

尝试使用在控制器的方法的UpdateModel的重载之一。然后调用ModelState.IsValid。

0

我相信SharpArch有一个可以加载NH对象的模型绑定器。但是,我不太喜欢这个想法......相反,我会使用单独的PostModel来保存发布的表单值。如果您重新使用ViewModel来保存发布数据,则通常会包含许多无意发布的字段(如您的示例中的Client对象)或只读字段。

class CampaignPostModel{ 
    ... 
    public int ClientId { get; set; } 
} 

所有你需要做的是对战属性名的表单输入名称和添加为您的文章操作方法的参数。