2010-11-18 44 views
0

這裏,列表框加載示例文本。 我Model.aspx將列表框綁定來自後端MVC2

public class Employee 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

public class MyViewModel 
{ 
    public string[] SelectedEmployeeIds { get; set; } 
    public IEnumerable<Employee> Employees { get; set; } 
} 

HomeController.cs

public ActionResult About() 
    { 
     var model = new MyViewModel 
     { 
      Employees = Enumerable.Range(1, 5).Select(i => new Employee 
     { 
      Id = i.ToString(), 
      Name = "employee " + i 
     }) 
     }; 
     return View(model); 
    } 

About.aspx

<%: Html.ListBoxFor(
    x => x.SelectedEmployeeIds, 
    new SelectList(Model.Employees, "Id", "Name") 
) %> 

上面的代碼工作正常。我想從後端加載列表框(即Emp Table)......我應該怎麼做。

+0

你是什麼意思「我應該怎麼做?」在您將'Employees'屬性分配給'MyViewModel'對象的代碼中執行此操作。 – RPM1984 2010-11-18 05:54:14

+0

謝謝......但是,我不知道如何從後端獲取值並在列表框中進行綁定。 – RobinHood 2010-11-18 06:10:23

回答

1

您沒有提供有關此產品的任何信息Emp Table。在ASP.NET MVC執行正確的方法是將抽象的數據訪問到存儲庫並使用該庫從你的控制器:

public interface IEmployeesRepository 
{ 
    IEnumerable<Employee> GetEmployees(); 
} 

現在你的控制器變爲:

public class HomeController: Controller 
{ 
    private readonly IEmployeesRepository _repository; 
    public HomeController(IEmployeesRepository repository) 
    { 
     _repository = repository; 
    } 

    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      Employees = _repository.GetEmployees() 
     }; 
     return View(model); 
    } 
} 

正如你可以看到數據訪問被從控制器中提取出來,並且並不關心這些員工來自哪裏。正是在這個時候,這停下來成爲一個ASP.NET MVC相關的問題,併成爲一個關於如何使用一些數據訪問技術來實現這個接口的問題。

假設您使用Linq to Entities作爲ORM。你的實現可能看起來像這樣:

public class EmployeesRepositorySql: IEmployeesRepository 
{ 
    public IEnumerable<Employee> GetEmployees() 
    { 
     using (var db = new EmployeesDbContext()) 
     { 
      return db.Employees; 
     } 
    } 
} 

OK,所以你可以看到,我們已經介紹了由Visual Studio中,當你從現有的數據庫中添加一個新的實體自動生成的數據上下文類。如果你不熟悉Entity Framework,你可以閱讀getting started tutorials

,或者如果你更喜歡直接使用ADO.NET:

public class EmployeesRepositorySql: IEmployeesRepository 
{ 
    public IEnumerable<Employee> GetEmployees() 
    { 
     using (var conn = new SqlConnection("SOME CONNECTION STRING")) 
     using (var cmd = conn.CreateCommand()) 
     { 
      conn.Open(); 
      cmd.CommandText = "SELECT Id, Name FROM Employees;"; 
      using (var reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        yield return new Employee 
        { 
         Id = reader.GetString(0), 
         Name = reader.GetString(1) 
        }; 
       } 
      } 
     } 
    } 
} 

所剩下的最後一部分是指導我們的控制器使用這個特定的實現存儲庫。這可以通過DI框架來實現。這是一個article explaining這。