5

Làm cách nào để có trình đơn thả xuống hiển thị như một phần của mẫu trình chỉnh sửa của tôi?Mẫu biên tập MVC 3 có chức năng thả xuống động

Vì vậy, tôi có một thực thể Người dùng và một thực thể Vai trò. Các vai trò được chuyển đến chế độ xem dưới dạng một danh sách chọn và người dùng dưới dạng một người dùng. Danh sách Chọn sẽ trở thành menu thả xuống có ID chính xác được chọn và mọi thứ thanks to this sample.

Tôi đang cố gắng để có được một tất cả-trong-một độc đáo EditorTemplate gói cho các thực thể của tôi bằng cách sử dụng MVC 3 để tôi chỉ có thể gọi EditorForModel và nhận được các lĩnh vực đặt ra độc đáo với một thả xuống thêm bất cứ khi nào tôi có một khóa nước ngoài cho những thứ như Vai trò, trong trường hợp cụ thể này.

My EditorTemlates \ User.cshtml (tự động tạo ra các layout dựa trên ViewData):

<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> 

Trên các Xem Tôi sau đó ràng buộc SelectList riêng rẽ, và tôi muốn làm điều đó như là một phần của mẫu .

My mẫu:

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

    public User currentUser { get; set; } 
} 

điều khiển của tôi:

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

Xem của tôi:

@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> 

}  

Hy vọng rằng đó là đủ rõ ràng, cho tôi biết nếu bạn có thể sử dụng làm rõ hơn. Cảm ơn trước!

+0

Bạn có sắp xếp điều này không? – REMESQ

+0

Chủ yếu, nó không chính xác là giải pháp tôi đang tìm kiếm, nhưng tôi tin rằng câu trả lời của Ben sẽ làm. –

Trả lời

0

Vì bạn cần quyền truy cập vào danh sách lựa chọn, bạn có thể tạo mẫu trình chỉnh sửa được liên kết với SecurityEditModel hoặc bạn có thể chuyển danh sách lựa chọn trong dạng xem dữ liệu. Cá nhân tôi sẽ đi với phương pháp gõ mạnh mẽ.

Các vấn đề liên quan