Лучший способ сделать ввод для подклассов на сайте ASP.NET MVC - PullRequest
0 голосов
/ 20 июня 2009

Я знаю, что заголовок немного сложно понять, но я точно не знал, как описать проблему, но вот она.

У меня есть эта доменная сущность: пользователь, и у нее есть список адресов подкласса, поскольку у пользователя может быть несколько адресов. Дом, работа и т. Д. ...

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{...};
  ...
}

У меня есть проверка входных данных, которая выглядит следующим образом.

[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, и теперь я хочу добавить адрес для этого пользователя. Я вижу способ сделать это

Это открытие новой веб-страницы с собственным контроллером, которая выполняет ту же проверку, что и я для Пользователя. Поэтому у меня есть класс FormAddress и CreateEdit () - метод в моем AddressController. Проблема, которую я вижу здесь, состоит в том, как мне добавить эти адресные данные пользователю, когда я закончу проверку данных?

Или есть лучший способ сделать это. Это действительно легко в приложении с состоянием, но здесь я не вижу хорошего чистого способа сделать это.

1 Ответ

0 голосов
/ 23 июня 2009

Ваша форма в представлении может содержать поля для пользователя и адреса. Попросите эту форму перейти к одному 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 отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...