style - html textareafor
¿Cómo configuro el atributo deshabilitado en html textbox en asp.net-mvc? (3)
Creo que desea omitir el atributo deshabilitado por completo cuando desee que esté habilitado. Los navegadores antiguos verían lo siguiente y desactivarían los cuadros de texto:
<input type="text" disabled></input>
En otras palabras, en HTML más antiguo, "= deshabilitado" no era necesario, por lo que, por razones de compatibilidad, simplemente debe omitir el atributo si desea que se visualice correctamente. Sin embargo, no estoy seguro de qué pasará si prueba un DOCTYPE estricto.
Intento establecer dinámicamente el atributo disabled en el cuadro de texto html y tener problemas
Intenté esto en mi opinión:
string disabledString = "";
if (SomeLogic)
{
disabledString = "disabled";
}
Html.Textbox()...new Dictionary<string, object> { { "maxlength", 50 }, { "disabled", readOnlyState } })%>
Como puede ver, estoy configurando el atributo desactivado en "" o desactivado, pero cuando lo pruebo, parece estar deshabilitado en cualquier caso. ¿Me estoy perdiendo de algo?
Esto fue feo para nosotros, debido al hecho de que las especificaciones HTML son pésimas aquí.
Básicamente, en nuestro código de vista tenemos una lógica como esta:
bool isPlatformOwner = false;
object disabledAttributes = new { @disabled="disabled", @readonly="readonly" };
//omitted code setting isPlatformOwner
if (isPlatformOwner)
{
disabledAttributes = new { };
}
Entonces, para nuestros controles, tuvimos esto:
<%=Html.CheckBoxFor(f => f.AddToReleaseIndicator, disabledAttributes)%>
Los tipos anónimos nos salvó aquí, pero, como dije, se puso un poco feo.
En realidad, es posible escribir una clase de extensión en HtmlHelper para hacerlo, pero debe implementar muchas anulaciones, por lo que la solución más rápida que encontré fue escribir una extensión de diccionario.
Puede usar la clase inferior para esto:
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;
}
}
Para usarlo, importe la clase en su vista y su código de vista se verá así:
@Html.TextBoxFor(m => m.FirstName, new Dictionary<string, object>().WithAttr("class","input-large").WithAttrIf(!string.IsNullOrWhiteSpace(Model.FirstName),"readonly","yes"))
Puede agregar tantos atributos como desee ya que el método de extensión agrega el valor al diccionario y devuelve el diccionario mismo