用户的ASP.NET MVC 3下拉列表 [英] ASP.NET MVC 3 Dropdownlist of Users
问题描述
在我的应用程序中,我已将 UserId
与数据库中的表相关联。我需要在创建新项目时从下拉列表中选择用户名。并且'可能使用元素viewbag做到这一点?
In my application I have associated my UserId
to a table in my database. I need that when I create a new item I can choose the user name from a dropdownlist. And 'possible to do this with the element viewbag?
@Html.EditorFor(model => model.UserId)
我使用默认的成员资格提供程序,因此无法使用实体框架解决此问题
I use default membership provider so I can't use Entity Framework for this problem
编辑
编辑2
这是我的操作创建:
[HttpPost]
public ActionResult Create(Employe employe)
{
var users = Roles.GetUsersInRole("Admin");
SelectList list = new SelectList(users);
ViewBag.Users = list;
if (ModelState.IsValid)
{
**employe.EmployeID = users;**
db.Employes.Add(employe);
db.SaveChanges();
}
这不起作用。错误是:
无法将类型'string []'隐式转换为'string'
Cannot implicitly convert type 'string[]' to 'string'
我的 Employee
public class Employee
{
[Key]
public int EmployeID { get; set; }
public Guid UserId { get; set; }
public string Name { get; set; }
[ForeignKey("UserId")]
public virtual MembershipUser User
{
get
{
return Membership.GetUser(this.Name); //Changed this to Name
}
}
}
}
视图:
@Html.DropDownList("Users", ViewBag.Users as SelectList);
我在 UserId
字段中的结果不是一个 UserId
,但是此 000000-000000-0000000-00000
My result in UserId
field isn't a UserId
but this 000000-000000-0000000-00000
推荐答案
如何在ViewBack中将用户列表设置为SelectItem
是的,您应该可以通过将集合传递给ViewBag,然后从中创建下拉菜单:
How to set a list of users as a SelectItem in the ViewBack Yes, you should be able to do this by passing your collection to the ViewBag and then create you dropdown from it:
在您的控制器中
var users = Roles.GetUsersInRole("Admin");
SelectList list = new SelectList(users);
ViewBag.Users = list;
在您的视图中(如果您使用的是Razor)
In your View (If you're using Razor)
@Html.DropDownList("Users", ViewBag.Users as SelectList);
在此处详细了解SelectListItem:
Read more about SelectListItem here:
- http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem.aspx
也可以签出:
- How can I get this ASP.NET MVC SelectList to work?
- Problem with ASP.Net MVC SelectLIst and List<SelectListItems>
问题已更改为其他内容。这是我解决问题的想法:
控制器:
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>
这篇关于用户的ASP.NET MVC 3下拉列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!