css - 使用@Html.EditorForModel 的限制

标签 css asp.net razor html-helper asp.net-mvc-5

我正在开发一个 asp.net mvc-5 网络应用程序。我有以下模型类:-

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,因为我将在 View 上使用更少的标记:-

@Html.EditorForModel()

现在结果并不是我所期望的 100%:-

enter image description here

所以任何人都可以建议我如何克服这些限制:-

  1. 有没有办法将 ResourceType 字段作为下拉列表? .现在,如果我要呈现单独的字段,我可以使用 @Html.DropDownlistFor .. 但不确定在使用 @Html.EditorForModel 时我该如何处理?

  2. 有没有办法修改生成的布局?,现在在我的应用程序中很常见,我有以下标签布局 --> 文本框:-

    <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 个单独的行上?

  1. 我能否强制 EditorForModel 呈现 RESOURCECUSTOMFIELD 列表列?

最佳答案

EditorForModel默认模板不是高度可定制的。你应该写一个 EditorTemplate 来解决你所有的问题。你可以查看这个tutorial . 您将不得不手动编写所有属性,但您只需为每个模型编写一次。将模板放入文件夹 EditorTemplates/你的整个应用程序都可以使用它。回答你的问题:

  1. 现在您可以编写自己的模板,可以为您的属性使用任何类型的输入。 string 的默认编辑器type 是一个文本框(dropdown for enum type)。

  2. 您必须在模板中编写自己的布局。这正是您想要的。

  3. 您还可以为 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 的东西。适用于模型。

关于css - 使用@Html.EditorForModel 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36927871/

相关文章:

html - 伪一线需要双冒号语法吗?

c# - 如何以标准格式转换日期时间

c# - 动态控件 - C# - CheckBoxList Parent - Children

c# - 使用@Url.Action 生成 URL

html - MVC Razor View Engine,在引号之间添加逻辑

javascript - 如何将表单发送到 JavaScript 函数

html - 如何更改 Bootstrap 媒体查询?

javascript - Jquery 显示隐藏属性

c# - 访问该路径被拒绝

jquery - 复选框详细 View