2011-07-10 13 views
5

Doğrulama ile radyo düğmesi listesini doldurmamız gereken MVC3 web uygulamasına sahibim. Employee1Name - - Employee1Department // id - adı - departmanı MVC Radyo bağlantısı bağlayıcı karmaşık nesne

  • Employee2ID - Employee2Name - Employee2Department

    • Employee1ID:

      public class EmployeesViewModel 
      { 
          public List<Employee> listEmployee { get; set; } //To persist during post 
          public IEnumerable<SelectListItem> selectListEmployee { get; set; } 
      
          [Required] 
          public Employee selectedEmployee { get; set; } 
      } 
      
      public class Employee 
      { 
          public int ID {get; set;} 
          public string Name {get; set} 
          public string Department {get; set} 
      } 
      

      ben gibi aşağıda Radiobuton liste şey doldurmak gerekir: My Modeli böyle bir şeydir

    • Employee3ID - Employee3Name - Employee3Department

    Seçilen Çalışan "selectedEmployee" alanına kaydedilmelidir. Bu radyo düğmesi Listesini MVC3'te doldurmanın en iyi veya temiz yolu nedir?

    Not: Ağırlıklı olarak iki görev için Aranan: Her "Giriş" radyo düğmesi etiketinde 1. depolama "Çalışan" nesne, seçilen çalışanın "selectedEmployee" alanı 2. en iyi yolu işaretlemek için kaydedilir, böylece "Çalışan msgstr "gerekli alan" nesne

    Yardımlarınız için çok teşekkür ederiz!

    Teşekkürler,

  • cevap

    11

    İşte size öneriyorum. Sonunda bir görünüm

    public class HomeController : Controller 
    { 
        public ActionResult Index() 
        { 
         var model = new EmployeesViewModel 
         { 
          ListEmployee = GetEmployees() 
         }; 
         return View(model); 
        } 
    
        [HttpPost] 
        public ActionResult Index(EmployeesViewModel model) 
        { 
         if (!ModelState.IsValid) 
         { 
          // the model is invalid, the user didn't select an employee 
          // => refetch the employee list from the repository and 
          // redisplay the view so that he can fix the errors 
          model.ListEmployee = GetEmployees(); 
          return View(model); 
         } 
    
         // validation passed at this stage 
         // TODO: model.SelectedEmployeeId will contain the id 
         // of the selected employee => use your repository to fetch the 
         // actual employee object and do something with it 
         // (like grant him the employee of the month prize :-)) 
    
         return Content("thanks for submitting", "text/plain"); 
        } 
    
        // TODO: This doesn't belong here obviously 
        // it's only for demonstration purposes. In the real 
        // application you have a repository, use DI, ... 
        private List<EmployeeViewModel> GetEmployees() 
        { 
         return new[] 
         { 
          new EmployeeViewModel { ID = 1, Label = "John (HR)" }, 
          new EmployeeViewModel { ID = 2, Label = "Peter (IT)" }, 
          new EmployeeViewModel { ID = 3, Label = "Nathalie (Sales)" }, 
         }.ToList(); 
        } 
    } 
    

    ve: o zaman bir kontrol

    public class EmployeesViewModel 
    { 
        public List<EmployeeViewModel> ListEmployee { get; set; } 
    
        [Required] 
        public int? SelectedEmployeeId { get; set; } 
    } 
    
    public class EmployeeViewModel 
    { 
        public int ID { get; set; } 
        public string Label { get; set; } 
    } 
    

    : gerçekten görünüm bilgisi olarak ne içerdiğini ifade eden bir temiz görünüm modeli biriyle başlayın

    @model EmployeesViewModel 
    
    @using (Html.BeginForm()) 
    { 
        @Html.ValidationMessageFor(x => x.SelectedEmployeeId) 
        @foreach (var employee in Model.ListEmployee) 
        { 
         <div> 
          @Html.RadioButtonFor(x => x.SelectedEmployeeId, employee.ID, new { id = "emp" + employee.ID }) 
          @Html.Label("emp" + employee.ID, employee.Label) 
         </div> 
        } 
        <input type="submit" value="OK" /> 
    } 
    
    +0

    Teşekkür Darin! Bu görüş modeli gerçekten amaca hizmet ediyor! – matmat

    +0

    Sizden daha fazla bir düşünce mi arıyorsunuz? Benim durumumda "Çalışan" masamda birleşik anahtar varsa ne dersiniz? ("ID" ve "Departman" gibi) birleşik anahtar oluştururlar. Bu durumda, istediğim gerçek nesneyi elde etmek için ID ve Bölüm'ü geçmem gerekiyor. Bunu yapmanın en iyi yolu nedir? – matmat

    +1

    @matmat, bir radyo düğmesi sadece tek bir değer gönderir, dolayısıyla bu durumda bileşik tuşlara sahip olmak mantıklı olmaz. Veritabanınızın benzersiz bir birincil anahtarını kullanabilirsiniz. Alternatif olarak, ID özelliği, form geri yüklendiğinde ve iki değeri aldığınızda ancak hackish gibi göründüğünde, denetleyicinizde bölebildiğiniz 'ID_DEPT 'formunun bir dizesi olabilir. Benzersiz bir birincil anahtar daha iyi bir yaklaşımdır. –

    İlgili konular