我认为弹出编辑模式是最好的编辑模式,但是对于较大的模型,弹出窗口会变得很长,看起来不太好。
我已经找到了解决方案,我很好奇您对此解决方案的想法/反馈/增强功能。
我创建了两个自定义属性:
public class NumberOfColumnsAttribute : Attribute, IMetadataAware
{
    private readonly int _numberOfColumns;
    public NumberOfColumnsAttribute(int numberOfColumns)
    {
        _numberOfColumns = numberOfColumns;
    }
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        if (!metadata.AdditionalValues.ContainsKey("NumberOfColumns"))
        {
            metadata.AdditionalValues.Add("NumberOfColumns", _numberOfColumns);
        }
    }
}
public class ShowInColumnAttribute : Attribute, IMetadataAware
{
    private readonly int _column;
    public ShowInColumnAttribute(int column)
    {
        _column = column;
    }
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        if (!metadata.AdditionalValues.ContainsKey("ShowInColumn"))
        {
            metadata.AdditionalValues.Add("ShowInColumn", _column);
        }
    }
}
然后使用编辑模型上方的 [NumberOfColumns( m )] 属性并使用属性上方的 [ShowInColumn( n )] 属性(如果未应用任何属性,则假定 n=1)。
我在 Views/Shared/EditorModels/ 中创建了一个 Object.cshtml 文件,如下所示。
@if (ViewData.TemplateInfo.TemplateDepth > 1)
{
    @ViewData.ModelMetadata.SimpleDisplayText
} else {
    for (var i = 1; i <= (int)(!ViewData.ModelMetadata.AdditionalValues.ContainsKey("NumberOfColumns") ? 1 : ViewData.ModelMetadata.AdditionalValues["NumberOfColumns"]);i++)
    {
        <div class="editor-column">
        @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm) && ((int)(!pm.AdditionalValues.ContainsKey("ShowInColumn") ? 1 : pm.AdditionalValues["ShowInColumn"])) == i))
        {
            if (prop.HideSurroundingHtml) {
                @Html.Editor(prop.PropertyName)
            } else {
                <div class="editor-label">
                    @Html.Label(prop.PropertyName)
                    @(prop.IsRequired ? "*" : "")
                </div>
                <div class="editor-field">
                    @Html.Editor(prop.PropertyName)
                    @Html.ValidationMessage(prop.PropertyName, "*")
                </div>
            }
        }
        </div>
    }
    <div class="editor-seperator"></div>
}
以及以下几行 CSS:
.k-edit-form-container {
    width: auto;
}
.editor-column {
    width: 400px;
    float: left;
}
.editor-seperator {
    clear: both;
}
你怎么看?