我正在使用NHibernate,我有一个Campaign
类,它有一个Client
类作为其成员之一,我试图在ModelState.IsValid
中使用[HttpPost] public Create (CreateCampaignViewModel vm)
{1}}方法。
由于我的ViewModel包含对象Campaign
ModelStats.IsValid
,因为我从表单而不是整个Client.Id
对象传递Client
,因此始终为false。
有没有办法让它在运行设置ModelState.IsValid
的验证码之前加载客户端成员?或者,在我根据ClientId手动'检索客户端对象并将其绑定到Campaign后,有没有办法刷新ModelState
的状态?
答案 0 :(得分:1)
http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/
答案 1 :(得分:1)
您可能希望向操作方法的参数添加属性,以禁用Id的绑定:
[HttpPost]
public Create([Bind(Ignore="ClientId")]CreateCampaignViewModel vm)
答案 2 :(得分:0)
尝试使用控制器的UpdateModel方法中的一个重载。然后调用ModelState.IsValid。
答案 3 :(得分:0)
我相信SharpArch有一个可以加载NH对象的模型绑定器。但是,我不太喜欢这个想法......相反,我会使用一个单独的PostModel来保存已发布的表单值。如果您重新使用ViewModel来保存发布数据,那么通常会有很多无法发布的字段(如示例中的Client对象)或只读显示字段。
class CampaignPostModel{
...
public int ClientId { get; set; }
}
您需要做的就是将属性名称与表单输入名称进行匹配,并将其作为后期操作方法的参数添加。