使用MVC4,有没有办法可以将Html类添加到Html.TextBoxFor C#中生成的输入?

时间:2013-10-29 00:15:13

标签: c# html asp.net-mvc

我想在我的viewmodel中的属性上放置一个属性,比如“[MyVmAttribute]”,并且在该属性上创建的每个HTML.TextBoxFor都应该添加一个html类来反映这个事实,让我们说“class-from” - 属性“或某事。我的需求实际上要比这复杂得多,但是我需要知道WHERE强制这个“查找属性并基于它添加一个类”功能。

重要提示:

这与验证无关,因此继承ValidationAttribute并劫持数据属性规则功能似乎是错误的。

2 个答案:

答案 0 :(得分:0)

为什么不直接将类添加到模型中并将它们绑定到文本框?

@Html.TextBoxFor(m => m.UserName, new { @class = '@Model.MyStyle' })

如果它不必是动态的

,您也可以直接设置它
 @Html.TextBoxFor(m => m.UserName, new { @class = "someClass" })

答案 1 :(得分:0)

您可以创建自己的编辑器Editor Template

这意味着您将指定而不是TextBoxFor,而是EditorFor,并调用您的自定义模板。

然后在模板中,您会查找自定义属性MyVmAttribute,获取名称/值并将其注入您自己的HTML文本框<input type='text' />TextBoxFor

示例,在您的视图中:

@Html.EditorFor(x=>x.MyProperty,"MyEditorTemplate")

在您的编辑器模板中(位于〜/ Views / Shared / EditorTemplates / MyEditorTemplate.cshthml中):

@model String
//code to get custom attribute (HtmlKeyValueAttribute) out of `ViewData.ModelMetadata`
//and insert it as either
//@Html.TextBox
//OR
//<input type='text' />
//adding the attribute(s) in a foreach possibly

你的属性我建议可以多次使用的东西:

public class HtmlKeyValueAttribute : Attribute
{
    public String Name {set;get;}
    public String Value {set;get;}

    public HtmlKeyValueAttribute(String name, String value)
    {
        this.Name = name;
        this.Value = value;
    }
}