我们可以使用属性来装饰模型类的属性,例如:
public class MyViewModel
{
// other properties are skipped
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
}
如果在视图中调用内置的Html辅助方法(如Html.TextBoxFor()/ Html.TextBox()),它们可以自动从属性中获取元数据,并相应地生成HTML标记,例如,调用:
<div class="col-sm-4 ">
@Html.Label("First Name", @Model.FirstName)
</div>
<div class="col-sm-7">
@Html.TextBox("FirstName", @Model.FirstName )
@Html.ValidationMessage("FirstName", "", null)
</div>
将为您提供一段实现客户端验证的HTML,这意味着如果用户将文本框留空,则会显示验证消息。
但是,因为我有一组与我的模型类关联的动态字段,从数据库生成,我根本无法使用属性来装饰它们。所以,我的问题是,我可以调用TextBox(),显式地和程序化地传递属性元数据,以便它生成HTML,好像属性是用[Required]装饰的吗?
总之,我需要以编程方式直接指导辅助方法,就好像他们从属性元数据中获取指令一样。
我浏览了MSDN页面,但没有发现任何线索。如果我不能这样做,我可能需要覆盖TextBox(),那么最好的方法是什么?请注意,我将使用TextBox()而不是强类型方法。
更多背景信息:
我有一个动态字段的VM类定义为:
public class DynmFldViewModel
{
public string Name { get; set; }
public int DataType { get; set; }
public bool IsRequired { get; set; }
public string FieldValue { get; set; }
}
让我假设我有一些与Product实体相关联的动态字段,所以在我的产品编辑视图后面,我有一个定义为的视图模型:
public class ProductViewModel
{
// other properties are skipped
public List<DynmFldViewModel> fields { get; set; }
}