I am trying to dynamically set the disabled attribute on the html textbox and having issues
I tried this in my view:
string disabledString = \"\";
I think you want to omit the disabled attribute altogether when you want it to be enabled. Older browsers would look at the following and disable the text boxes:
<input type="text" disabled></input>
In other words in older HTML the ="disabled" was not necessary so for compatibility reasons you should just omit the attribute if you want it to render right. I'm not sure what happens if you try a strict DOCTYPE, though.
This was ugly for us, due to the fact that the HTML spec is lousy here.
Basically in our view code we had some logic like this:
bool isPlatformOwner = false;
object disabledAttributes = new { @disabled="disabled", @readonly="readonly" };
//omitted code setting isPlatformOwner
if (isPlatformOwner)
{
disabledAttributes = new { };
}
Then, for our controls, we had this:
<%=Html.CheckBoxFor(f => f.AddToReleaseIndicator, disabledAttributes)%>
Anonymous types saved us here, but, like I said, it got a little ugly.
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