MVC 3编辑器模板与动态下拉

本文关键字:动态 编辑器 MVC | 更新日期: 2023-09-27 18:18:09

如何将下拉列表显示为编辑器模板的一部分?

我有一个Users实体和一个Roles实体。角色作为SelectList传递给视图,User作为User传递给视图。SelectList变成了一个下拉列表,并选择了正确的ID,这要感谢这个示例。

我试图得到一个一体化的很好地捆绑EditorTemplate为我的实体使用MVC 3,这样我就可以调用EditorForModel和得到字段布局很好下拉添加每当我有一个外键的东西,如角色,在这个特定的实例。

我EditorTemlates '用户。cshtml(基于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>

在View中,我分别绑定了SelectList,我想把它作为模板的一部分。

我的模型:

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

我的控制器:

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

我的观点:

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

希望这足够清楚,如果你需要更多的说明,请告诉我。提前感谢!

MVC 3编辑器模板与动态下拉

因为你需要访问SelectList,你可以创建一个绑定到SecurityEditModel的编辑器模板,或者你可以在ViewData中传递SelectList。我个人倾向于使用强类型方法。