Как установить список пользователей в качестве SelectItem в ViewBack Да, вы должны быть в состоянии сделать это, передав свою коллекцию в ViewBag, а затем создать из нее выпадающий список:
В вашем контроллере
var users = Roles.GetUsersInRole("Admin");
SelectList list = new SelectList(users);
ViewBag.Users = list;
В вашем представлении (если вы используете Razor)
@Html.DropDownList("Users", ViewBag.Users as SelectList);
Узнайте больше о SelectListItem здесь:
Также проверьте:
Вопрос изменен на нечто большее.Вот моя идея, чтобы решить эту проблему:
Контроллер :
public ActionResult Mirko() {
List<SelectListItem> items = new List<SelectListItem>();
foreach (string userName in Roles.GetUsersInRole("Admin")) {
var user = Membership.GetUser(userName);
SelectListItem li = new SelectListItem {
Value = user.ProviderUserKey.ToString(),
Text = user.UserName,
};
items.Add(li);
}
items.Add(new SelectListItem { Text = "Please Select...", Value = "na" , Selected = true});
ViewBag.Users = items;
return View();
}
[HttpPost]
public ActionResult Mirko(Employee employee) {
if(IsValideEmployee(employee)) {
/*Only used to show that user was retrieved*/
TempData["message"] = "Saved Employee";
TempData["user"] = employee.User;
/* employeeRepository.Save(employee) */
/* Redirect to where you want to go */
return RedirectToAction("Mirko", "Home");
}
return View(employee);
}
private bool IsValideEmployee(Employee emp) {
if (emp.Name == "na")
ModelState.AddModelError("UserId", "You must select a user!");
/*Do some validation here*/
//ModelState.Add("Name", "You must set the user name!")
return ModelState.IsValid;
}
Просмотр
@model StackOverFlowExample.Models.Employee
@{
MembershipUser user = null;
ViewBag.Title = "Mirko Example";
var users = ViewBag.Users as IEnumerable<SelectListItem>;
}
@if (TempData["message"] != null) {
user = TempData["user"] as MembershipUser;
<h3>@TempData["message"]</h3>
<div>
<span>You selected @user.UserName</span>
<ul>
<li>Email: @user.Email</li>
<li>Last Logged In: @user.LastLoginDate.ToString("d")</li>
<li>Online: @user.IsOnline</li>
</ul>
</div>
}
@using (@Html.BeginForm()) {
<label for="UserId">Associate Employee To User:</label>
@Html.DropDownListFor(m => m.UserId, @users)
@Html.HiddenFor(m => m.Name)
<input type="submit" value="Save" id="save-employee"/>
}
<div id="status" style="display:none;"></div>
<script type="text/javascript">
$(document).ready(function () {
$("#UserId").change(function () {
//Set value of name
$("#Name").val($(this).children("option:selected").text());
});
$("#save-employee").click(function (e) {
var value = $("#Name").val();
if (value == "" || value == "na") {
e.preventDefault();
$("#status").html("<h3>You must select a user!</h3>").toggle();
}
});
});
</script>