समस्या यह है कि, आपके टेम्पलेट में कई HTML तत्व हो सकते हैं, इसलिए MVC को पता नहीं होगा कि कौन सा आपके आकार / वर्ग को लागू करेगा। आपको इसे स्वयं परिभाषित करना होगा।
अपनी खुद की कक्षा को TextBoxViewModel नामक अपने टेम्पलेट से प्राप्त करें:
public class TextBoxViewModel
{
public string Value { get; set; }
IDictionary<string, object> moreAttributes;
public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
{
// set class properties here
}
public string GetAttributesString()
{
return string.Join(" ", moreAttributes.Select(x => x.Key + "='" + x.Value + "'").ToArray()); // don't forget to encode
}
}
टेम्पलेट में आप ऐसा कर सकते हैं:
<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />
आपके विचार में आप करते हैं:
<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>
पहला रूप स्ट्रिंग के लिए डिफ़ॉल्ट टेम्पलेट प्रस्तुत करेगा। दूसरा रूप कस्टम टेम्पलेट को प्रस्तुत करेगा।
वैकल्पिक वाक्यविन्यास धाराप्रवाह इंटरफ़ेस का उपयोग करें:
public class TextBoxViewModel
{
public string Value { get; set; }
IDictionary<string, object> moreAttributes;
public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
{
// set class properties here
moreAttributes = new Dictionary<string, object>();
}
public TextBoxViewModel Attr(string name, object value)
{
moreAttributes[name] = value;
return this;
}
}
// and in the view
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) %>
ध्यान दें कि देखने में ऐसा करने के बजाय, आप इसे नियंत्रक में भी कर सकते हैं, या ViewModel में बहुत बेहतर:
public ActionResult Action()
{
// now you can Html.EditorFor(x => x.StringValue) and it will pick attributes
return View(new { StringValue = new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) });
}
यह भी ध्यान दें कि आप आधार टेम्प्लेटव्यूमॉडल क्लास बना सकते हैं - आपके सभी व्यू टेम्प्लेट के लिए एक सामान्य आधार - जिसमें विशेषताओं / आदि के लिए बुनियादी समर्थन होगा।
लेकिन सामान्य तौर पर मुझे लगता है कि एमवीसी वी 2 को एक बेहतर समाधान की आवश्यकता है। यह अभी भी बीटा है - इसके लिए पूछें ;-)