下拉列表 - MVC3

1 c# asp.net-mvc asp.net-mvc-3 drop-down-menu

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

SMS_User包括UserName,DivisionID,EmailAddress

SMS_Division包含DivisionID,DivisionName.

控制器代码:

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

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

@Html.DropDownListFor(model => model.divisionid, (IEnumerable<SelectListItem>) ViewData["Divisions"], "<--Select a divison-->") 
@Html.ValidationMessageFor(model => model.divisionid) 
Run Code Online (Sandbox Code Playgroud)

我有这个错误消息:

CS0103: The name 'sms_amountlimit2' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)

Mat*_*ieu 5

我将在我的回答中假设你的问题有一些缺失部分,并给你一个通用模式,在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; }
}
Run Code Online (Sandbox Code Playgroud)

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

public class DivisionModel
{
   public int DivisionId { get; set; }
   public string DivisionName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

public class UserViewModel
{
   public UserModel User { get; set; }
   public IEnumerable<DivisionModel> Divisions {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

接下来,控制器:

public class UserController : Controller
{
   public ActionResult Create()
   {
      List<DivisionModel> divisions = new List<DivisionModel>();
      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 });
   }
}
Run Code Online (Sandbox Code Playgroud)

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

最后是视图:

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

<h2>Create</h2>
<p>
@Html.DropDownListFor(model => model.User.DivisionId, new SelectList(Model.Divisions, "DivisionId", "DivisionName"),  "-- Select Division --") 
@Html.ValidationMessageFor(model => model.User.DivisionId)  
</p>
Run Code Online (Sandbox Code Playgroud)

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