我正在开发一个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()
&amp; LabelFor()
在现场一级。但是对于这个模型,我想开始使用@Html.EditorForModel
,因为我在视图上的标记会更少: -
@Html.EditorForModel()
现在结果并非100%我所期待的: -
任何人都可以提出如何克服这些限制的建议: -
有没有办法将ResourceType字段作为drodownlist? 。现在,如果我渲染单独的字段,我可以使用@Html.DropDownlistFor
..但不确定在使用@Html.EditorForModel
时我如何处理此问题?
有没有办法修改生成的布局?现在通常在我的应用程序中我都有以下标签布局 - &gt;文本框: -
<div>
<span class="f">@Html.DisplayNameFor(model => model.Resource.RESOURCENAME)</span>
@Html.EditorFor(model => model.Resource.RESOURCENAME)
@Html.ValidationMessageFor(model => model.Resource.RESOURCENAME)
</div>
我有标签&amp;在同一行的文本,我用class = f包装标签,它将以粗体显示标签。那么我可以修改EditorForModel
生成的输出,使标签和文本框在同一行,而不是在2个单独的行上吗?
RESOURCECUSTOMFIELD
列表列吗?答案 0 :(得分:6)
EditorForModel
默认模板无法高度自定义。您应该编写 EditorTemplate 来解决所有问题。您可以查看tutorial。
您必须手动编写所有属性,但每个模型只能执行一次。将模板放在文件夹EditorTemplates/
中,您的整个应用都可以使用它。要回答你的子弹:
现在您编写自己的模板,您可以为您的属性使用任何类型的输入。 string
类型的默认编辑器是文本框(enum
类型的下拉列表)。
您必须在模板中编写自己的布局。这正是你想要的。
您还可以为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 的内容。
答案 1 :(得分:2)
1.您可以在模型字段上方使用[UIHint(&#34; custom_template&#34;)]。 例如:
public class Class1
{
public int id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
[UIHint("gender_template")]
public string Gender { get; set; }
}
然后你应该在Shared / EditorTemplates中创建gender_template.cshtml,如下图所示。
文件gender_template.cshtml中的示例代码。
@Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "Male", Text = "Male" },
new { Value = "Female", Text = "Female" },
},
"Value",
"Text",
Model
)
)
然后在View页面代码中
@model MvcApplication2.Models.Class1
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@Html.EditorForModel()
运行视图页面后的结果是
您可以根据需要制作更多自定义模板。