Actually, it is possible to write an Extension class to the HtmlHelper
to do this, but you have to implement many overrides so the quickest solution I found was to write a dictionary extension.
You can use below class for this:
public static class DictionaryExtensions
{
public static Dictionary<string, object> WithAttrIf(this Dictionary<string,object> dictionary,bool condition, string attrname, object value)
{
if (condition)
dictionary[attrname] = value;
return dictionary;
}
public static Dictionary<string, object> WithAttr(this Dictionary<string, object> dictionary, string attrname, object value)
{
dictionary[attrname] = value;
return dictionary;
}
}
To use it, import the class in your view and your view code looks like this:
@Html.TextBoxFor(m => m.FirstName, new Dictionary<string, object>().WithAttr("class","input-large").WithAttrIf(!string.IsNullOrWhiteSpace(Model.FirstName),"readonly","yes"))
You can add as many attributes as you wish since the extension method adds the value to the dictionary and returns the dictionary itself.