我在ASP MVC3中使用C#。我有两个来自SQL Server的表。在SQL Server 2008中,表名是SMS_User
和SMS_Division
。当我创建一个新用户时,我想从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() } );
}
当我在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
答案 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 --")