我正在一个asp.net mvc-5 web应用程序.我有以下模型类:
public class Details4 { [HiddenInput(DisplayValue=false)] public string RESOURCENAME { set; get; } [Display (Name="Account Name")] [required] public string ACCOUNTNAME { set; get; } [Display(Name = "Resource type")] [required] public string RESOURCETYPE { set; get; } [DataType(DataType.Password)] [required] public string PASSWORD { set; get; } [Display(Name = "Description")] [DataType(DataType.MultilineText)] public string Description { set; get; } [Display(Name= "URL")] [Url] public string RESOURCEURL { set; get; } [Display(Name="Owner Name")] [required] public string OWNERNAME { set; get; } [Display(Name = "Resource Group Nam")] public string RESOURCEGROUPNAME { set; get; } [JsonProperty("Domain")] public string DomainName { set; get; } [JsonProperty("DNSNAME")] public string DNSNAME { set; get; } [Display(Name = "Department")] public string DEPARTMENT { set; get; } [Display(Name = "Location")] public string LOCATION { set; get; } public List<RESOURCECUSTOMFIELD> RESOURCECUSTOMFIELD { set; get; } } public class RESOURCECUSTOMFIELD { public string CUSTOMLABEL { set; get; } public string CUSTOMVALUE { set; get; } }
现在我通常使用@ Html.EditorFor()& LabelFor()在字段级别.但是对于这个模型,我想开始使用@ Html.EditorForModel,因为我将在视图上具有更少的标记:
@Html.EditorForModel()
现在这个结果不是我所期望的100%:
所以可以任何一个建议我如何克服这些限制:
有没有一种方法可以将ResourceType字段作为下拉列表? .现在如果我渲染单独的字段我可以使用@ Html.DropDownlistFor ..但不知道如何处理这个当使用@ Html.EditorForModel?
>有没有办法修改生成的布局?现在通常在我的应用程序我有以下布局的标签 – >文本框:-
<div> <span class="f">@Html.DisplayNameFor(model => model.Resource.RESOURCENAME)</span> @Html.EditorFor(model => model.Resource.RESOURCENAME) @Html.ValidationMessageFor(model => model.Resource.RESOURCENAME) </div>
我有标签&文本在同一行,我用一个class = f包装标签,它将以粗体字显示标签.所以我可以修改EditorForModel中生成的输出,使标签和文本框在同一行,而不是在2个单独的行?
>我能否强制EditorForModel呈现RESOURCECUSTOMFIELD列表列?
解决方法
EditorForModel默认模板不是高度可定制的.你应该编写一个EditorTemplate来解决你所有的问题.你可以检查这个
tutorial.
您将必须手动编写所有属性,但每个模型只能执行一次.将模板放在EditorTemplates文件夹中,您的整个应用程序可以使用它.回答你的子弹:
您将必须手动编写所有属性,但每个模型只能执行一次.将模板放在EditorTemplates文件夹中,您的整个应用程序可以使用它.回答你的子弹:
>现在你编写自己的模板,你可以为你的属性使用任何类型的输入.字符串类型的默认编辑器是一个文本框(枚举类型的下拉列表).
>您将不得不在模板中编写自己的布局.这正是你想要的.
>您还可以编写RESOURCECUSTOMFIELD的编辑器模板,并在模板中使用它.即使对于IEnumerable&RESOURCECUSTOMFIELD>也可以编写一个模板:
@model IEnumerable<RESOURCECUSTOMFIELD> @foreach(var customModel in Model) { @Html.LabelFor(m => customModel.CUSTOMLABEL ) @Html.TextBoxFor(m => customModel.CUSTOMVALUE ) }
并使用它(在你的主模板):
@Html.EditorFor(m => m.RESOURCECUSTOMFIELD )
如果要更改DisplayFor对模型的工作原理,还有一些名为DisplayTemplate的东西.