5

Editör şablonumun bir parçası olarak görüntülemek için açılır menüyü nasıl alabilirim?MVC 3 Editör Şablonu Dynamic Drop Down ile

Bu yüzden bir Kullanıcı varlığım ve Rol'üm varlığım var. Roller, bir Kullanıcı olarak, bir Seçim Listesi ve Kullanıcı olarak görünümüne geçirilir. SelectList, doğru ID seçili ve her şey thanks to this sample ile bir açılır kapanır.

MVC 3 kullanan varlıklarım için hepsi bir arada güzel bir EditorTemplate'i almaya çalışıyorum, böylece yalnızca bir yabancı anahtarım olduğunda bir açılır menüden EditorForModel'i arayabilir ve alanları güzel bir şekilde ortaya koyabilirim Roles gibi şeyler için bu özel örnekte.

Benim EditorTemlates \ User.cshtml (dinamik olarak ViewData dayalı düzen üreten): Ben o ayrı SelectList bağlayıcı ediyorum View üzerinde

<table style="width: 100%;"> 
@{ 
    int i = 0; 
    int numOfColumns = 3; 

    foreach (var prop in ViewData.ModelMetadata.Properties 
     .Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) 
    { 
     if (prop.HideSurroundingHtml) 
     { 
      @Html.Display(prop.PropertyName) 
     } 
     else 
     { 
      if (i % numOfColumns == 0) 
      { 

       @Html.Raw("<tr>"); 
      } 

      <td class="editor-label"> 
       @Html.Label(prop.PropertyName) 
      </td> 
      <td class="editor-field"> 
       @Html.Editor(prop.PropertyName) 
       <span class="error">@Html.ValidationMessage(prop.PropertyName,"*")</span> 
      </td> 

      if (i % numOfColumns == numOfColumns - 1) 
      { 
       @Html.Raw("</tr>"); 
      } 
      i++; 
     } 
    } 
} 
</table> 

ve ben şablonunun bir parçası olarak yapmak istiyorum .

Benim Modeli:

public class SecurityEditModel 
{ 
    [ScaffoldColumn(false)] 
    public SelectList roleList { get; set; } 

    public User currentUser { get; set; } 
} 

My Denetleyici:

public ViewResult Edit(int id) 
{ 
    User user = repository.Users.FirstOrDefault(c => c.ID == id); 

    var viewModel = new SecurityEditModel 
     { 
      currentUser = user, 
      roleList = new SelectList(repository.Roles.Where(r => r.Enabled == true).ToList(), "ID", "RoleName") 
     }; 

    return View(viewModel); 
} 

Benim Görünüm:

@model Nina.WebUI.Models.SecurityEditModel 

@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Edit</h2> 


@using(Html.BeginForm("Edit", "Security")) 
{ 
    @Html.EditorFor(m => m.currentUser) 
    <table style="width: 100%;"> 
     <tr> 
      <td class="editor-label"> 
       User Role: 
      </td> 
      <td class="editor-field"> 
       <!-- I want to move this to the EditorTemplate --> 
       @Html.DropDownListFor(model => model.currentUser.RoleID, Model.roleList) 
      </td> 
     </tr> 
    </table> 
    <div class="editor-row"> 
     <div class="editor-label"> 

     </div> 
     <div class="editor-field"> 

     </div> 
    </div> 
    <div class="editor-row">&nbsp;</div> 
    <div style="text-align: center;"> 
     <input type="submit" value="Save"/>&nbsp;&nbsp; 
     <input type="button" value="Cancel" onclick="location.href='@Url.Action("List", "Clients")'"/> 
    </div> 

}  

Umarım yeterince açık, sen daha fazla açıklama kullanabilirsiniz varsa bana bildirin. Şimdiden teşekkürler!

+0

Bunu halledin mi? – REMESQ

+0

Çoğunlukla, aradığım çözüm tam olarak değil, ama Ben'in cevabının yapacağına inanıyorum. –

cevap

0

SelectList'e erişmeniz gerektiğinden, SecurityEditModel'a bağlı bir düzenleyici şablonu oluşturabilir veya SelectList'i ViewData'ya geçirebilirsiniz. Şahsen ben şiddetle yazılan yaklaşımla giderdim.