Может быть, это не совсем то решение, которое мне нужно, но это то, что я хочу сделать:
У меня есть форма регистрации компании, и каждой компании нужен административный пользователь.административный пользователь может управлять несколькими компаниями, поэтому в форме регистрации компании вы можете выбрать существующего пользователя из выпадающего списка.
модель представления компании выглядит примерно так:
public class CompanyViewModel {
[Required]
public string Name { get; set; }
// other properties...
public UserViewModel Administrator { get; set; }
public IEnumerable<UserViewModel> AvailableUsers { get; set; }
}
и модель представления пользователя выглядит следующим образом:
public class UserViewModel {
[Required]
public string UserName { get; set; }
[Required]
public string Password { get; set; }
// other properties...
}
в представлении регистрации компании:
<div><input type="radiobutton" name="chooseuser" id="existing"/>Choose an Existing User:</div.
<div>@Html.DropDownListFor(m => m.Administrator.Id, Model.AvailableUsers.Select(u => new SelectListItem { Text = string.Format("{0} - {1} {2}", u.UserName, u.FirstName, u.LastName), Value = u.Id.ToString() }), "<Choose existing user>", new { id = "existingusers" })
</div>
<div><input type="radiobutton" name="chooseuser" id="createnew"/>Create a new User:</div>
<div><label>Username:</label> @Html.EditorFor(m => m.Administrator.UserName)</div>
С помощью javascript, основанного на выборе переключателей, раскрывающийся список отключается и отображается новая пользовательская форма, либо новая пользовательская форма скрывается, а раскрывающийся список включен.
Проблеманаходится в контроллере Сохранить действие после нажатия кнопки Сохранить, ModelState.IsValid имеет значение false, если выбран существующий пользователь и данные не заполнены в форме.Если пользователь решает ввести нового пользователя, проверка завершается успешно.
Каков наилучший способ справиться с этим?
Одним из вариантов является загрузка всех данных для всех пользователей в структуры данных в javascript, и когда значение изменяется в существующем выпадающем списке пользователей, могут быть заполнены скрытые поля формы «создать новый».Но это кажется неубедительным, поскольку пароли будут содержать HTML в виде обычного текста.я могу привыкнуть и использовать ajax для «создания новой» формы и заполнить идентификатор пользователя в исходной форме после сохранения нового пользователя, но я хотел бы сохранить все это в одной форме, если это возможно.
Кажется, мне бы хотелось, чтобы в идеале я мог бы загрузить существующие пользовательские данные из БД и заполнить состояние модели в действии контроллера Save, но написание этого кода вручную (даже с использованием отражения) кажется небрежным.Было бы неплохо, если бы для этого был встроенный метод.
Есть идеи?
Спасибо.