asp.net-mvc – 弹出编辑模式下的多个列
发布时间:2020-12-16 09:52:55 所属栏目:asp.Net 来源:网络整理
导读:我认为弹出编辑模式是最好的编辑模式,但是对于更大的模型,弹出窗口变得非常长,看起来不太好. 我找到了解决方案,我很好奇您对此解决方案的想法/反馈/增强功能. 我创建了两个自定义属性: public class NumberOfColumnsAttribute : Attribute,IMetadataAware{
我认为弹出编辑模式是最好的编辑模式,但是对于更大的模型,弹出窗口变得非常长,看起来不太好.
我找到了解决方案,我很好奇您对此解决方案的想法/反馈/增强功能. 我创建了两个自定义属性: 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; } 你怎么看? 解决方法
我想,这会简单得多.请在宽屏幕上运行此脚本.
var crudServiceBaseUrl = "//demos.telerik.com/kendo-ui/service",dataSource = new kendo.data.DataSource({ transport: { read: { url: crudServiceBaseUrl + "/Products",dataType: "jsonp" },update: { url: crudServiceBaseUrl + "/Products/Update",destroy: { url: crudServiceBaseUrl + "/Products/Destroy",create: { url: crudServiceBaseUrl + "/Products/Create",parameterMap: function(options,operation) { if (operation !== "read" && options.models) { return {models: kendo.stringify(options.models)}; } } },batch: true,pageSize: 20,schema: { model: { id: "ProductID",fields: { ProductID: { editable: false,nullable: true },ProductName: { validation: { required: true } },UnitPrice: { type: "number",validation: { required: true,min: 1} },Discontinued: { type: "boolean" },UnitsInStock: { type: "number",validation: { min: 0,required: true } } } } } }); $("#grid").kendoGrid({ dataSource: dataSource,pageable: true,height: 550,toolbar: ["create"],columns: [ { field:"ProductName",title: "Product Name" },{ field: "UnitPrice",title:"Unit Price",format: "{0:c}",width: "120px" },{ field: "UnitsInStock",title:"Units In Stock",{ field: "Discontinued",{ command: ["edit","destroy"],title: " ",width: "250px" }],editable: "popup",edit: fnMultipleLayoutForm }); function fnMultipleLayoutForm(){ $(".k-edit-form-container").prepend('<div class="column1" style="display: inline-block; float: left;padding-right:30px"></div><div class="column2" style="display: inline-block;float: left;padding-right:30px;"></div>'); $(".k-edit-form-container").children(".k-edit-label,.k-edit-field").slice(0,parseInt($(".k-edit-form-container").children(".k-edit-label,.k-edit-field").length / 2)).appendTo(".column1"); $(".k-edit-form-container").children(".k-edit-label,.k-edit-field").appendTo(".column2"); $(".k-edit-form-container").css("width","auto"); $('.k-window').css({ top: '50%',left: '50%',margin: '-' + ($('.k-window').height() / 2) + 'px 0 0 -' + ($('.k-window').width() / 2) + 'px' }); }; <script src="//kendo.cdn.telerik.com/2015.3.1111/js/jquery.min.js"></script> <script src="//kendo.cdn.telerik.com/2015.3.1111/js/kendo.all.min.js"></script> <link rel="stylesheet" href="//kendo.cdn.telerik.com/2015.3.1111/styles/kendo.common.min.css" /> <link rel="stylesheet" href="//kendo.cdn.telerik.com/2015.3.1111/styles/kendo.default.min.css" /> <div id="grid"></div> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何在ZedGraph中的每个点显示标签?
- asp.net-mvc – 默认模型绑定抛出“没有为此对象定义的无参
- asp.net-mvc – ASP.NET MVC:自定义排序
- asp.net – GetHashCode在这里只是货物崇拜吗?
- ASP.NET本地化与单数和复数
- asp.net-mvc – Sitecore视图渲染和控制器渲染助手
- 这个ASP.NET顾问知道他在做什么?
- asp.net – MVC 5使用旧表单身份验证而不是OWIN
- asp.net-mvc – 如何使用ASP.NET MVC中强制/应用的属性调用
- 在mono xsp上托管asp.net – raspberry pi