下拉列表 – MVC3

我在ASP MVC3中使用C#。 我有两个来自SQL Server的表。表名是SQL Server 2008中的SMS_UserSMS_Division 。当我创建一个新用户时,我想显示来自sms_division表的分区ID。

SMS_User包含UserNameDivisionIDEmailAddress

SMS_Division包含DivisionIDDivisionName

控制器代码:

 UserController : Controller { private NetPerfMonEntities2 db = new NetPerfMonEntities2(); IEnumerableZamZam= db.SMS_Division.Select(c => new SelectListItem { Value = c.divisionid.ToString(), Text = c.divisionid.ToString() } ); } 

当我在User Create()VIEW中创建新用户时,我想将DivisonName显示为下拉列表而不是文本框。 我是怎么做到的?

 @Html.DropDownListFor(model => model.divisionid, (IEnumerable) ViewData["Divisions"], "") @Html.ValidationMessageFor(model => model.divisionid) 

我有这个错误消息:

 CS0103: The name 'sms_amountlimit2' does not exist in the current context 

我将在我的回答中假设你的问题有一些缺失,并给你一个通用模式,在ASP.NET MVC 3中有一个工作下拉列表:

让我们从模型开始:

UserModel将是表示从sms_user提取的数据的类

 public class UserModel { public string Username { get; set; } public string EmailAddress { get; set; } public int DivisionId { get; set; } } 

DivisionModel将是表示从sms_division提取的数据的类

 public class DivisionModel { public int DivisionId { get; set; } public string DivisionName { get; set; } } 

通过Extracted,我的意思是可以在instanciated类中转换数据库中的数据。 这可以是ORM(EntityFramework或其他),或SQL查询等…

接下来是viewmodel,因为在UserModel中插入IEnumerable的分区是没有意义的,我个人并不喜欢在我可以避免它的时候使用ViewData:

 public class UserViewModel { public UserModel User { get; set; } public IEnumerable Divisions {get; set;} } 

接下来,控制器:

 public class UserController : Controller { public ActionResult Create() { List divisions = new List(); divisions.Add(new DivisionModel() { DivisionId = 1, DivisionName = "Division1" }); divisions.Add(new DivisionModel() { DivisionId = 2, DivisionName = "Division2" }); UserModel user = new UserModel() { Username = "testUser", EmailAddress = "testAddress@test.com" }; return View(new UserViewModel() { User = user, Divisions = divisions }); } } 

我只是创建了Division列表和用户,但是你可以通过任何方式从你的数据库中获得。

最后是视图:

 @model ViewModels.UserViewModel @{ ViewBag.Title = "Create"; } 

Create

@Html.DropDownListFor(model => model.User.DivisionId, new SelectList(Model.Divisions, "DivisionId", "DivisionName"), "-- Select Division --") @Html.ValidationMessageFor(model => model.User.DivisionId)

请注意,绑定到视图的模型是ViewModel。

在您的模型中添加一个部门的集合,然后创建下拉列表,如下所示:

 @Html.DropDownListFor(m => m.SelectedDivisionId, new SelectList(Model.Divisions, "DivisionId", "DivisionName"), "-- Select Division --")