Tenho algumas entradas desativadas em um formulário e quero enviá-las para um servidor, mas o Chrome as exclui da solicitação.
Existe alguma solução alternativa para isso sem adicionar um campo oculto?
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
</form>
Respostas:
Os elementos com o
disabled
atributo não são enviados ou você pode dizer que seus valores não são postados (consulte o segundo marcador na Etapa 3 na especificação do HTML 5 para criar o conjunto de dados do formulário ).Ou seja,
FYI, de acordo com 17.12.1 na especificação HTML 4:
Você pode usar o
readonly
atributo no seu caso, fazendo isso, poderá postar os dados do seu campo.Ou seja,
FYI, de acordo com 17.12.2 na especificação HTML 4:
fonte
Usando o Jquery e enviando os dados com ajax, você pode resolver o seu problema:
fonte
cursor:not-allowed;
Para postar valores de entradas desativadas, além das entradas ativadas, você pode simplesmente reativar todas as entradas do formulário enquanto elas estão sendo enviadas.
Se você preferir jQuery:
Para o ASP.NET MVC C # Razor, você adiciona o manipulador de envio assim:
fonte
Se você absolutamente precisar desabilitar o campo e passar os dados, poderá usar um javascript para inserir os mesmos dados em um campo oculto (ou apenas definir o campo oculto). Isso permitiria desativá-lo, mas ainda publicaria os dados, mesmo que você estivesse postando em outra página.
fonte
Estou atualizando esta resposta, pois é muito útil. Basta adicionar somente leitura à entrada.
Portanto, o formulário será:
fonte
Semanticamente, isso parece o comportamento correto
Eu estaria me perguntando " Por que preciso enviar esse valor? "
Se você tiver uma entrada desativada em um formulário, presumivelmente não deseja que o usuário altere o valor diretamente
Qualquer valor exibido em uma entrada desativada deve ser
Supondo que o servidor que processa o formulário seja o mesmo que o servidor que o atende, todas as informações para reproduzir os valores das entradas desativadas devem estar disponíveis no processamento
De fato, para preservar a integridade dos dados - mesmo que o valor da entrada desativada tenha sido enviado ao servidor de processamento, você deve realmente validá-la. Essa validação exigiria o mesmo nível de informação que você precisaria para reproduzir os valores de qualquer maneira!
Eu quase argumentaria que entradas somente leitura não deveriam ser enviadas na solicitação
Feliz por ser corrigido, mas todos os casos de uso em que posso pensar em que entradas somente leitura / desativadas precisam ser enviadas são apenas problemas de estilo disfarçados
fonte
Acho que isso funciona mais fácil. leia apenas o campo de entrada e, em seguida, estilize-o para que o usuário final saiba que é somente leitura. as entradas colocadas aqui (do AJAX, por exemplo) ainda podem ser enviadas, sem código extra.
fonte
Você pode evitar totalmente a desativação, é doloroso, pois o formato do formulário html não envia nada relacionado a
<p>
outro rótulo.Então você pode colocar regularmente
Adicione isso
readonly="readonly"
Ele não desativaria o seu texto, mas não mudaria de usuário, por isso funciona como
<p>
e enviará valor através do formulário. Basta remover a borda se você quiser torná-la mais parecida com uma<p>
tagfonte