我知道标题有点难以理解,但我并不知道如何描述问题,但它来了。
我有这个域实体:User和它有一个子类Address的列表,因为用户可以有多个地址。家庭,工作等等......
private class User{
private string _FirstName;
private string _LastName;
private IList<Address> _addresses;
public string FirstName{...}
public string LastName{...}
public IList<Addresses> Addresses {...}
}
private class Address{
private string _streetAddress1;
private string _streetAddress2;
...
public string StreetAddress1{...};
public string StreetAddress2{...};
...
}
我对inputdata进行了验证,看起来像这样。
[AcceptVerbs(HttpVerbs.Post)]
[ValidateModelAttribute(typeof(FormUser))]
public ActionResult CreateEdit([Bind(Prefix = "")] FormUser formUser)
{
//-- Check so the input
if (!ModelState.IsValid)
return View();
User modelUser = new UserMapper().MapToModel(formUser);
_UserRepository.Save(modelUser);
return RedirectToAction<SharedController>(m => m.Success());
}
FormUser是我的PresentationEntity,看起来像这样。
public class FormUser
{
[NonEmptyValidator("Field is required!")]
public string FirstName{get;set;}
[NonEmptyValidator("Field is required!")]
public string LastName{get;set;}
public List<Address> Addresses{get;set;}
}
对于FirstName和LastName字段,这是没有问题的,它非常简单并且有效。但是现在我已经将Addresses属性添加到了我的User实体,并希望以一种智能的方式进行输入,并且可以轻松验证Address实体中的输入字段。
所以说我的网页上有FirstName和LastName文本框,现在我想为这个用户添加一个地址。我可以看到一种方法来做到这一点
打开一个新网页,该网页拥有自己的控制器,可以进行与用户相同的验证。所以我的AddressController中有一个FormAddress类和CreateEdit()方法。我在这里看到的问题是,当我完成数据验证后,如何将这个地址数据添加到用户?
或者有更好的方法来做到这一点。在有状态的应用程序中它真的很容易,但在这里我看不到一个干净利落的方法。
答案 0 :(得分:0)
视图中的表单可以包含用户和地址的字段。将此表单转到需要用户和地址的单个ActionResult。框架会将表单中的字段映射到域模型类中的属性(只要您将表单字段命名为与类属性相同的名称)。
public ActionResult CreateEdit(User user, Address address)
{
//validate the user and the address here (how is up to you)
//add the user
//add the address to the user
//save to the db
}
现在,在ActionResult中,您可以分别对User对象和Address对象执行验证。