将属性的属性元数据直接和编程地传递给Html Helper方法?

时间:2017-05-16 04:16:35

标签: c# asp.net-mvc html-helper

我们可以使用属性来装饰模型类的属性,例如:

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; }
}

0 个答案:

没有答案