Один из способов достижения вашей цели:
- поддерживать контроллер в чистоте только с одной моделью.
$model = new SignupForm();
- добавить дополнительные поля для профиля пользователя как свойство SignupForm.php
и ввести необходимые правила для их проверки.
public $fullname;
public $dateOfBirth;
public $address;
...
public function rules()
{
...
[['fullname', 'dateOfBirth', 'address'], 'required'],
}
- поставить логику для сохранения профиля пользователя внутри функции signup()
.
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->setPassword($this->password);
$user->generateAuthKey();
$userProfile = new UserProfile();
$userProfile->fullname = $this->fullname;
$userProfile->dateOfBirth = $this->dateOfBirth;
$userProfile->address = $this->address;
return $user->save() && ($userProfile->userId = $user->id) !== null && $userProfile->save() ? $user : null;
}
- наконец, добавьте поля профиля пользователя в поле зрения.
Вы можете использовать элемент управления System.Web.UI.WebControls.CheckBoxList
или использовать элемент управления System.Web.UI.WebControls.ListBox
с свойство SelectionMode
установлено на Несколько
.
HTML не поддерживает раскрывающийся список с флажками. Вы можете иметь выпадающий список или список флажков. Вы могли бы подделать список выпадающих списков, используя javascript и скрывать div, но это было бы менее надежно, чем просто стандартный список флажков.
Конечно, существуют сторонние элементы управления, которые выглядят как выпадающий список флажков, но они используют приемы div.
Вы также можете использовать двойной список, который обрабатывает множественный выбор, перемещая элементы назад и вперед между двумя списками. Это дает дополнительное преимущество, заключающееся в том, что можно легко видеть все выбранные элементы одновременно, даже несмотря на то, что список общих элементов длинный
(представьте список каждого города в мире, в котором будут указаны только первый и последний выбранные)
Мне нравятся элементы управления Infragistics. WebDropDown имеет то, что вам нужно. Единственный недостаток - они могут быть немного излишними.
Выпадающий контрольный список jQuery может использоваться для преобразования обычного элемента HTML с множественным выбором в выпадающий список флажков, он работает на клиенте, поэтому может использоваться с любой технологией на стороне сервера:
(источник: googlecode.com )
Проверьте это. Это бесплатно.
http://irfaann.blogspot.com/2009/07/ajax-based-multiselect-dropdown-control.html
HTH,
Вот классный элемент управления ASP.NET Web под названием Multi-Select List Field на http://www.xnodesystems.com/. Он способен:
(1) Мультивыбор; (2) Автозаполнение; (3) валидацию.