下拉列表 - MVC3

时间:2011-10-06 18:29:42

标签: c# asp.net-mvc asp.net-mvc-3 drop-down-menu

我在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<SelectListItem>) ViewData["Divisions"], "<--Select a divison-->") 
@Html.ValidationMessageFor(model => model.divisionid) 

我有以下错误消息:

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

2 个答案:

答案 0 :(得分: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; }
}

DivisionModel将是表示从sms_division

中提取的数据的类
public class DivisionModel
{
   public int DivisionId { get; set; }
   public string DivisionName { get; set; }
}

By Extracted,我指的是任何可以在instanciated类中转换数据库中的数据的东西。这可以是ORM(EntityFramework或其他),或SQL查询等......

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

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

接下来,控制器:

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 });
   }
}

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

最后是视图:

@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>

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

答案 1 :(得分:0)

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

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