Realmente, em um caso normal não tem a necessidade de usar o js para esse tipo de alteração de atributo. Mas vamos imaginar o seguinte caso:
Você tem uma página principal (WebForm) onde existe o campo cidade em um componente textbox, no qual o valor será passado por um popup que trará uma pesquisa onde será selecionado a cidade e na sequência ao fechar esse popup estará no campo mencionado o valor da cidade.
Até esse ponto, está tudo normal ao selecionar o registro no popup você estará chamando um bloco parecido com esse:
String sString = "";
sString = "window.opener.document.forms(0).txtCidade.value = '" + cidade + "';";
sString += "window.opener.document.forms(0).submit();";
sString += "self.close();";
ClientScript.RegisterClientScriptBlock(this.GetType(), "OK", sString, true);
A coisa começa a complicar quando o campo cidade "deve" esta em readOnly. Nesse caso o trecho acima não faz o menor efeito.
Teoricamente podemos incluir no trecho o pedido para deixar o textbox sem readOnly e após incluir o campo voltando para tal:
String sString = "";
sString = "window.opener.document.forms(0).txtCidade.readonly = false;";
sString += "window.opener.document.forms(0).txtCidade.value = '" + cidade + "';";
sString += "window.opener.document.forms(0).txtCidade.readonly = true;";
sString += "window.opener.document.forms(0).submit();";
sString += "self.close();";
ClientScript.RegisterClientScriptBlock(this.GetType(), "OK", sString, true);
Mesmo desse jeito citado acima não funcionaria, pois em cima da especificação de segurança usada pela framework da microsoft (2.0 em diante) uma vez o campo definido na tag como readOnly não é possível a sua edição.
Mas existe uma maneira de driblar essa segurança. Vale informar que isso não é recomendado pela Microsoft, pois justamente se existe esse bloqueio e para evitar uma brecha de segurança. Mas mesmo ciente dos risco, quiser utilizar, siga os seguintes passos:
- Deixe o componente textbox com a opção readonly como false.
- No Page_Load inclua o seguinte atributo "txtCidade.Attributes.Add("readOnly", "true");" (sem as aspas)
- Utilize o segundo trecho de código informado acima.