2013-10-29 66 views
0

我想在我的viewmodel屬性中放置一個屬性,比如說「[MyVmAttribute]」,並且在該屬性上創建的每個HTML.TextBoxFor都應該添加一個html類來反映這個事實,比如說「class-from-屬性「或其他。我的需求實際上比這更復雜,但我需要知道WHERE強制這個「尋找一個屬性並添加一個基於它的類」的功能。使用MVC4,有沒有一種方法可以添加html類到Html.TextBoxFor在C#中生成輸入?

重要提示:

這有什麼好做驗證,所以繼承ValidationAttribute和劫持的數據屬性的規則的功能似乎有誤。

回答

0

爲什麼不把模型添加到模型中並將它們綁定到文本框?

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

你也可以把它直接,如果它不必是動態的

@Html.TextBoxFor(m => m.UserName, new { @class = "someClass" }) 
0

你可以創建自己的編輯器Editor Template

這將意味着你會指定而不是TextBoxFor,你會去EditorFor,並調用你的自定義模板。

然後在模板中,您將查找自定義屬性MyVmAttribute,獲取名稱/值並將其注入到您自己的HTML文本框<input type='text' />TextBoxFor中。

例,在你看來:

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

在你的編輯模板(位於〜/查看/共享/ 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; 
    } 
} 
相關問題