2011-10-06 85 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> 

注意綁定到視圖模型是視圖模型。