2011-07-14 69 views
1

我是超新的MVC3和C#,所以請原諒我的noob問題。我幾乎整整一天都在爲此苦苦掙扎,並希望有人能夠闡明一些看法(我已經搜索了這個網站以尋找線索,提示和答案)。使用LINQ/MVC3/C#的Dropdownlist問題讓它綁定

我在我的數據庫中有一個表,它將保存所有的數據。這是一個配置文件編輯器,它將存儲用戶可以在選擇時自動填充其計時輸入表單的值。我在第一步,試圖用配置文件名填充第一個下拉列表。我正在使用LINQ,MVC3/Razer和C#。

這裏是我的dbml: 廣東話後的圖像,因爲我新

http://imageshack.us/photo/my-images/560/timem.png/

這裏是我的模型:

namespace Timekeeping.Models 
{ 

    public class Profile 
    { 
     public int Profile_ID { get; set; } 
     public string profilename { get; set; } 
     public string networkuserid { get; set; } 
     public int projectnumber { get; set; } 
     public int costcode { get; set; } 
     public int paycode { get; set; } 
     public int jobtype { get; set; } 
     public int workorder { get; set; } 
     public int activity { get; set; } 
     public string taxarea { get; set; } 
     public IEnumerable<Profile> profiles { get; set; } 
    } 



    public class ProfileViewModel 
    { 
     public int Profile_ID { get; set; } 
     public IEnumerable<SelectListItem> profiles { get; set; } 
    } 
} 

這裏是我的控制器:

namespace Timekeeping.Controllers 
public class TimeProfileController : Controller 
    { 


     private static String strConnString = ConfigurationManager.ConnectionStrings["timekeepingConnectionString"].ConnectionString; 


     [HttpGet] 
     public ActionResult ProfileSelect() 
     { 

      profileConnectionDataContext dataContext = new profileConnectionDataContext(strConnString); 
      var model = new ProfileViewModel(); 
      var rsProfile = from fbs in dataContext.TimeProfiles select fbs; 

      ViewData["ProfileList"] = new SelectList(rsProfile, "Profile_ID", "profilename"); 
      return View(model); 
     } 


    } 

這裏是我嘗試過的所有不同的HTML幫助器我查看(無工作):

@Html.DropDownList("rsProfile", (SelectList)ViewData["ProfileList"])) 

@Html.DropDownListFor(
     x => x.Profile_ID, 
     new SelectList(Model.profiles, "Values", "Text"), 
     "-- Select--" 
    ) 

    @Html.DropDownListFor(model => model.Profile_ID, Model.profilename) 

我知道這是一個爛攤子看看,但我希望有人能幫助這樣我就可以得到與硬的部分。在此先感謝您的幫助,我從社區

回答

0

得到試試這個:

public class TimeProfileController : Controller 
{ 
    private static String strConnString = ConfigurationManager.ConnectionStrings["timekeepingConnectionString"].ConnectionString; 

    [HttpGet] 
    public ActionResult ProfileSelect() 
    { 
     var dataContext = new profileConnectionDataContext(strConnString); 
     var profiles = dataContext.TimeProfiles.ToArray().Select(x => new SelectListItem 
     { 
      Value = x.Profile_ID, 
      Text = x.profilename 
     }); 
     var model = new ProfileViewModel 
     { 
      profiles = profiles 
     }; 
     return View(model); 
    } 
} 

,並在視圖:

@model ProfileViewModel 
@Html.DropDownListFor(
    x => x.Profile_ID, 
    new SelectList(Model.profiles, "Values", "Text"), 
    "-- Select--" 
) 
+0

有一個問題:Value = fbs.Profile_ID, Text = fbs.profilename由於fbs沒有聲明,我怎麼能使用它? TY爲你提供幫助的人 – Alex

+0

@Alex,對不起,這就是當我在沒有測試的情況下直接輸入代碼時發生的情況。它應該是'x'而不是'fbs',因爲這就是我命名變量的方式。 –

+0

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。第51行:@ Html.DropDownListFor( – Alex

1

希望它肯定會工作...

內控制器:

var lt = from result in db.Employees select new { result.EmpId, result.EmpName }; 
ViewData[ "courses" ] = new SelectList(lt, "EmpId", "EmpName"); 

內視圖:

<%: Html.DropDownList("courses") %> 
0

如果您使用的是模型類只是試試這個:

<%: Html.DropDownList("EmpId", new SelectList(Model, "EmpId", "EmpName")) %> 

如果你想添加點擊事件下拉列表試試這個:

<%: Html.DropDownList("courses", ViewData["courses"] as SelectList, new { onchange = "redirect(this.value)" }) %> 

在上面的一個redirect(this.value)是一個JavaScript函數