2010-11-18 5 views
0

Ici, la zone de liste contient un exemple de texte chargé. Mon Model.aspx seraLiaison de zone de liste à partir du backend 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") 
) %> 

Le code ci-dessus fonctionne bien. Je veux charger la zone de liste à partir du Backend (i.e Emp Table) ... Où devrais-je faire cela.

+0

que voulez-vous dire "où devrais-je faire cela?" faites-le dans le code où vous affectez à la propriété 'Employees' à l'objet' MyViewModel'. – RPM1984

+0

Merci ... Mais, je ne sais pas comment obtenir les valeurs du backend et de lier dans la liste. – RobinHood

Répondre

1

Vous n'avez fourni aucune information à ce sujet Emp Table. La bonne façon de réaliser cela dans ASP.NET MVC est d'abstraire l'accès aux données dans un référentiel et ce dépôt de votre contrôleur:

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

Et maintenant votre contrôleur devient:

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

Comme vous peut voir l'accès aux données est abstraite du contrôleur et il ne se soucie pas vraiment d'où viennent ces employés. C'est à ce moment que cela cesse d'être une question liée ASP.NET MVC et devient une question sur la façon de mettre en œuvre cette interface en utilisant une technologie d'accès aux données. Supposons que vous utilisiez Linq to Entities comme ORM. Votre mise en œuvre pourrait ressembler à ceci:

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

OK, comme vous pouvez le voir, nous avons introduit la classe de contexte de données qui est généré automatiquement par Visual Studio lorsque vous ajoutez une nouvelle entité à partir d'une base de données existante. Si vous n'êtes pas familier avec Entity Framework, vous pouvez lire certains getting started tutorials.

ou si vous préférez utiliser directement 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) 
        }; 
       } 
      } 
     } 
    } 
} 

La dernière partie qui reste est de demander à notre contrôleur d'utiliser cette implémentation particulière du référentiel. Cela pourrait être réalisé avec un cadre DI. Voici un article explaining ceci.

Questions connexes