2010-11-18 4 views
0

여기에서 목록 상자는 샘플 텍스트로로드됩니다. 내 Model.aspx이 About.aspx목록 상자 백엔드 MVC2에서 바인딩

위의 코드는 잘 작동됩니다
<%: Html.ListBoxFor(
    x => x.SelectedEmployeeIds, 
    new SelectList(Model.Employees, "Id", "Name") 
) %> 

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

될 것입니다. 백엔드 (즉 Emp 테이블)에서 목록 상자를로드하고 싶습니다 ... 어디서해야합니까?

+0

"어디에서해야합니까?" 'MyViewModel' 객체에'Employees' 속성에 할당 한 코드에서 수행하십시오. – RPM1984

+0

고마워 ...하지만, 나는 어떻게 백엔드에서 값을 얻고 목록 상자에 바인딩 할 줄 몰라. – RobinHood

답변

1

Emp Table에 대한 정보를 제공하지 않았습니다. ASP.NET MVC에서이 작업을 수행 할 수있는 적절한 방법은 추상화 저장소에 데이터 액세스를하고 컨트롤러에서이 저장소를 사용 : 당신으로

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

:

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

이제 컨트롤러가된다 데이터 액세스가 컨트롤러에서 추상화 된 것을 볼 수 있으며 직원이 어디에서 오는지 실제로 신경 쓰지 않습니다. 이 순간에 ASP.NET MVC 관련 질문이 중단되고 일부 데이터 액세스 기술을 사용하여이 인터페이스를 구현하는 방법에 대한 질문이됩니다.

Linq to Entities를 ORM으로 사용한다고 가정 해 보겠습니다. 귀하의 구현은 다음과 같을 수 있습니다 :

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

확인을, 당신은 우리가 기존 데이터베이스에서 새 개체를 추가 할 때 자동으로 비주얼 스튜디오에 의해 생성 된 데이터 컨텍스트 클래스를 도입했습니다 볼 수 있도록. 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이 있습니다.