2011-10-06 83 views
1

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

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

当我创造用户新用户创建()查看我想显示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

用户控制器: private NetPerfMonEntities1 db = new NetPerfMonEntities1(); IEnumerable Divisions = db.SMS_Division。选择(c => new SelectListItem { Value = c.divisionid.ToString(), Text = c.divisionname.ToString() } ); { ViewData [“Divisions”] = divisions; } } } –

回答

0

在模型中添加区划的集合,然后创建下拉列表如下图所示:

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

错误消息:编译器错误消息:CS1061:“AFESignatureApplication.Models.SMS_AmountLimit2”不包含关于“司”的定义和没有扩展方法“司”接受的第一个参数可以找到'AFESignatureApplication.Models.SMS_AmountLimit2'类型(是否缺少使用指令或程序集引用?) 控制器代码: –

+0

private NetPerfMonEntities2 db = new NetPerfMonEntities2(); IEnumerable Divisions = db.SMS_Division.Select(c => new SelectListItem {Value = c.divisionid.ToString(),Text = c.divisionname.ToString()}); {ViewData [“师”] =师; } –

+0

@SyedSami请编辑您的文章并将代码放在代码块中,这里的评论无法阅读。 – shuniar

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

提取所提取的数据的类数据的类,我的意思是任何可以在实例化的类中转换数据库中的数据的东西。这可以是一个ORM(EntityFramework或其他),或SQL查询等...

接下来,是viewmodel,因为它插入一个IEnumerable在UserModel的分区没有意义,我个人不'吨真的喜欢使用的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 = "[email protected]" }; 

     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> 

注意绑定到视图模型是视图模型。