Como faço para criar uma caixa de texto somente leitura na ASP.NET MVC3 com o mecanismo de exibição Razor?
Existe um método HTMLHelper disponível para fazer isso?
Algo como o seguinte?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Como faço para criar uma caixa de texto somente leitura na ASP.NET MVC3 com o mecanismo de exibição Razor?
Existe um método HTMLHelper disponível para fazer isso?
Algo como o seguinte?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Você pode criar um HTML Helper para isso, mas é simplesmente um atributo HTML como qualquer outro. Você faria um HTML Helper para uma caixa de texto com outros atributos?
@
prefixo dareadonly
propriedade. Veja minha edição.@
. Normalmente, você só o verá com palavras-chave que correspondam a atributos HTML (como somente leitura, classe etc.)@
para usar atributos que correspondam a palavras-chave C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
ATUALIZAÇÃO: Agora é muito simples adicionar atributos HTML aos modelos de editor padrão. Isso significa em vez de fazer isso:
você simplesmente pode fazer isso:
Benefícios: Você não tem que ligar
.TextBoxFor
, etc. para modelos. Basta ligar.EditorFor
.Embora a solução do @Shark funcione corretamente, e seja simples e útil, minha solução (que uso sempre) é esta: Criar um
editor-template
que possa manipular oreadonly
atributo :EditorTemplates
em~/Views/Shared/
PartialView
chamadaString.cshtml
Preencha o
String.cshtml
com este código:Na classe de modelo, coloque o
[ReadOnly(true)]
atributo nas propriedades que você desejareadonly
.Por exemplo,
Agora você pode usar a sintaxe padrão do Razor simplesmente:
O primeiro renderiza um normal
text-box
assim:E o segundo irá renderizar;
Você pode usar esta solução para qualquer tipo de dados (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
e assim por diante). Basta criar umeditor-template
.fonte
A solução com TextBoxFor está OK, mas se você não quiser ver o campo como EditBox estiloso (pode ser um pouco confuso para o usuário), envolva as seguintes alterações:
Código do Razor antes das mudanças
Depois das mudanças
Geralmente, esta solução impede que o campo seja editado, mas mostra o valor dele. Não há necessidade de modificações por trás do código.
fonte
Com os créditos da resposta anterior de @Bronek e @Shimmy:
É como se eu tivesse feito a mesma coisa no ASP.NET Core:
A primeira entrada é somente leitura e a segunda passa o valor para o controlador e fica oculta. Espero que seja útil para alguém que trabalha com ASP.NET Core.
fonte
fonte
Isso é adequado para caixa de texto. No entanto, se você tentar fazer o mesmo para o
checkbox
, tente usar isto se estiver usando:Mas não use
disable
, porque desabilitar sempre envia o valor padrãofalse
para o servidor - ou estava no estado marcado ou não. Ereadonly
não funciona para a caixa de seleção eradio button
.readonly
só funciona paratext
campos.fonte
Você pode usar o código a seguir para criar um TextBox como somente leitura.
Método 1
Método 2
fonte