C# MVC下拉列表项目问题
我是MVC的新手。我正在创建用户管理模块,用于验证和授权使用该应用程序的用户。因此,我创建了两个模型,一个用于用户角色,另一个用于用户详细信息 我创建了两个这样的模型:C# MVC下拉列表项目问题,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我是MVC的新手。我正在创建用户管理模块,用于验证和授权使用该应用程序的用户。因此,我创建了两个模型,一个用于用户角色,另一个用于用户详细信息 我创建了两个这样的模型: public class RolesModels { public RolesModels() { this.Users = new HashSet<UserModels>(); } [Key] [DatabaseGeneratedAttribute(Data
public class RolesModels
{
public RolesModels()
{
this.Users = new HashSet<UserModels>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RoleId { get; set; }
[Required]
[DataType(DataType.Text)]
[StringLength(20, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
[Display(Name = "Caption")]
public string Caption { get; set; }
[Display(Name = "Can Create")]
public bool createRole { get; set; }
[Display(Name = "Can View")]
public bool viewRole { get; set; }
[Display(Name = "Can Modify")]
public bool modifyRole { get; set; }
[Display(Name = "Can Delete")]
public bool deleteRole { get; set; }
public virtual ICollection<UserModels> Users { get; set; }
}
public class UserModels
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int user_id { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
[StringLength(20, ErrorMessage = "The {0} must be at least 3 characters long.", MinimumLength = 3)]
public string user_name { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
[StringLength(10, ErrorMessage = "The {0} must be at least 4 characters long.", MinimumLength = 4)]
public string user_pass { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string UserEmail { get; set; }
[Display(Name = "Registeration Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime RegDate { get; set; }
[Display(Name = "Enable")]
public bool status { get; set; }
[Required]
public int RoleId { get; set; }
[Display(Name = "Roles")]
public virtual RolesModels Roles { get; set; }
}
[HttpGet]
public ActionResult registration()
{
// var md = from m in db.RolesModels
// orderby m.Caption descending
// select m;
// Html.DropDownList("Roles", new SelectList(ViewBag.Roles), new { @id = "dropdown" });
ViewBag.Roles = db.RolesModels.Select(r => r.Caption);
ViewBag.RolesId = db.RolesModels.Select(r => r.RoleId);
return View();
}
@Html.DropDownList("RoleId", new SelectList(ViewBag.Roles), new { @id = "dropdown" })
我使用dropdownlist创建了一个注册视图,如下所示:
public class RolesModels
{
public RolesModels()
{
this.Users = new HashSet<UserModels>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int RoleId { get; set; }
[Required]
[DataType(DataType.Text)]
[StringLength(20, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
[Display(Name = "Caption")]
public string Caption { get; set; }
[Display(Name = "Can Create")]
public bool createRole { get; set; }
[Display(Name = "Can View")]
public bool viewRole { get; set; }
[Display(Name = "Can Modify")]
public bool modifyRole { get; set; }
[Display(Name = "Can Delete")]
public bool deleteRole { get; set; }
public virtual ICollection<UserModels> Users { get; set; }
}
public class UserModels
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int user_id { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "User Name")]
[StringLength(20, ErrorMessage = "The {0} must be at least 3 characters long.", MinimumLength = 3)]
public string user_name { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
[StringLength(10, ErrorMessage = "The {0} must be at least 4 characters long.", MinimumLength = 4)]
public string user_pass { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string UserEmail { get; set; }
[Display(Name = "Registeration Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime RegDate { get; set; }
[Display(Name = "Enable")]
public bool status { get; set; }
[Required]
public int RoleId { get; set; }
[Display(Name = "Roles")]
public virtual RolesModels Roles { get; set; }
}
[HttpGet]
public ActionResult registration()
{
// var md = from m in db.RolesModels
// orderby m.Caption descending
// select m;
// Html.DropDownList("Roles", new SelectList(ViewBag.Roles), new { @id = "dropdown" });
ViewBag.Roles = db.RolesModels.Select(r => r.Caption);
ViewBag.RolesId = db.RolesModels.Select(r => r.RoleId);
return View();
}
@Html.DropDownList("RoleId", new SelectList(ViewBag.Roles), new { @id = "dropdown" })
我的HTTPPost在这里
[HttpPost]
public ActionResult registration(Solnet_HotelSuite.Models.UserModels user)
{
if (ModelState.IsValid)
{
using (var db = new DBEntity())
{
var sysUser = db.UserModels.Create();
sysUser.user_name = user.user_name;
sysUser.user_pass = user.user_pass;
sysUser.UserEmail = user.UserEmail;
sysUser.RegDate = user.RegDate;
sysUser.RoleId = user.RoleId;
//sysUser.Roles = user.Roles;
sysUser.status = user.status;
db.UserModels.Add(sysUser);
db.SaveChanges();
}
}
return View(user);
}
但是,每当我单击Register user时,就会出现错误:
值不能为null。参数名称:items
我做错了什么?回发后,您放在viewbag中的项目丢失了。尝试将HttpPost代码的结尾更改为:
ViewBag.Roles = db.RolesModels.Select(r => r.Caption);
ViewBag.RolesId = db.RolesModels.Select(r => r.RoleId);
return View(user);
您可能需要调整此代码,因为此时
db
对象可能超出范围。注册用户是按钮吗?您的列表是否已填充?是的,列表已填充,“注册用户”是一个按钮。我还注意到,当我检查生成的html时,select标记在选项中没有值,只有文本属性。所以,你放了Get控制器,但你说问题在于Post控制器…你的Post在哪里?哦!我刚刚添加了HTTPPost操作,请更清楚地说明这一点。在将代码调整为suite后,我得到了“ObjectContext实例已被释放,不能再用于需要连接的操作”。我该怎么办?