Почему бы вам не получить базу данных, хранилище или бизнес-правило - как бы вы это ни называли, отправьте обратно IDictionary ???
В этом примере предполагается, что у вас есть список пользователей, вы отправите обратно ключ с его идентификатором, а значение с, скажем, именем + фамилией:
Затем используйте это в представлении....
<%= Html.DropDownListFor(model => model.UserID, new SelectList(Model.AvailableUsers, "Key", "Value",Model.UserID))%>
model.UserID = Key
Model.AvailableUsers = IDictionary<int,string>
Я иногда создаю свои списки в некотором вспомогательном коде, затем я ищу эти значения с помощью этого помощника ... так что есть один централизованный класс (обычно статический), который будет генерировать этих "пользователей"...
Передайте этих пользователей непосредственно или альтернативно представлению ViewModel, как в вашем случае, что я и рекомендую
ПРИМЕЧАНИЕ. Вы не будете связывать свой контекст данных с привязкой к списку / модели, это делает вещи слишком сложными.Просто возьмите UserID как выбранного пользователя из списка, а затем в своем сообщении соответственно:
ViewModel:
public class UsersViewModel
{
public int UserID { get; set; }
public IDictionary<int,string> AvailableUsers{ get; set; }
}
В вашем сообщении ...
[HttpPost]
[ValidateAntiForgeryToken]
[DemandAuthorization(RoleNames.AdminUser, AlwaysAllowLocalRequests = true)]
public ActionResult AllUsers(int UserID)
{
try
{
//save to db or whatever...
return RedirectToAction("Index", "Users");
}
catch (RulesException ex)
{
ex.CopyTo(ModelState); //custom validation copied to model state
}
var _users= _service.GetUsers();
return View("AllUsers", new UsersViewModel
{
UserID = UserID,
AvailableUsers = _users
});
}