在ASP.NET MVC站点中为子类进行输入的最佳方法

时间:2009-06-20 18:59:53

标签: asp.net-mvc

我知道标题有点难以理解,但我并不知道如何描述问题,但它来了。

我有这个域实体: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()方法。我在这里看到的问题是,当我完成数据验证后,如何将这个地址数据添加到用户?

或者有更好的方法来做到这一点。在有状态的应用程序中它真的很容易,但在这里我看不到一个干净利落的方法。

1 个答案:

答案 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对象执行验证。