1 c# asp.net-mvc asp.net-mvc-3 drop-down-menu
我在ASP MVC3中使用C#.我有两个来自SQL Server的表.表名是SMS_User和SMS_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)
我将在我的回答中假设你的问题有一些缺失部分,并给你一个通用模式,在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.
| 归档时间: |
|
| 查看次数: |
6259 次 |
| 最近记录: |