2010-11-18 18 views
0

Burada liste kutusu örnek Metin yüklenir. My Model.aspx About.aspxListeden Ciltleme Backend MVC2

Yukarıdaki kod iyi çalışıyor
<%: 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); 
    } 

olacaktır. Listeyi Backend'den (örn. Emp Table) yüklemek istiyorum ... Bunu nerede yapmalıyım?

+0

Ne demek "Bunu nerede yapmalıyım?" 'Çalışanlar' özelliğine MyViewModel 'nesnesine atadığınız kodda yapın. – RPM1984

+0

Teşekkürler ... Ancak, arka uçtaki değerleri nasıl alacağımı ve liste kutusunda nasıl bağlanacağını bilmiyorum. – RobinHood

cevap

1

Bu Emp Table hakkında herhangi bir bilgi vermediniz. ASP.NET MVC bu gerçekleştirmek için uygun yolu soyut bir depoya veri erişimi olan ve denetleyici bu depoyu kullanmak: Size şöyle

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

Ve şimdi kontrolör olur Veri erişiminin denetleyiciden soyutlandığını görebilir ve bu çalışanların nereden geldiğini gerçekten önemsemez. Şu anda bu bir ASP.NET MVC ile ilgili soru olmayı bırakıyor ve bu arabirimi bazı veri erişim teknolojilerini kullanarak nasıl uygulayacağınızla ilgili bir soru haline geliyor.

Ayrıca, Linq'i Varlık olarak ORM olarak kullandığınızı varsayalım. Sizin uygulama aşağıdaki gibi görünebilir:

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

Tamam, biz varolan bir veritabanından yeni bir varlık eklediğinizde otomatik olarak Visual Studio tarafından oluşturulan veri bağlam sınıfı girmiştik görebilirsiniz şekilde. Varlık Çerçevesi'ne aşina değilseniz, bazı getting started tutorials'u okuyabilirsiniz.

veya doğrudan ADO.NET kullanmayı tercih ediyorsanız:

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

bırakılır son bölüm deposu bu özel uygulama kullanmak bizim denetleyici talimat etmektir. Bu bir DI çerçeve ile elde edilebilir. İşte bu bir article explaining.