Como faço para enviar entrada desabilitada no ASP.NET MVC?
Como faço para enviar entrada desabilitada no ASP.NET MVC?
Respostas:
Você não pode fazer o campo em readonly="readonly"
vez de disabled="disabled"
? Um valor de campo somente leitura será enviado ao servidor, embora ainda não seja editável pelo usuário. No SELECT
entanto, uma tag é uma exceção.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
como posso torná-lo cinza de forma que pareça que não é editável? Melhor ainda, podemos usar algo semelhante ao LabelFor, eu tentei LabelFor, mas ele só obtém o DisplayName ....
type="checkbox"
entradas
Obrigado a todos:
A maneira como resolvi isso:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Nota:
Consegui essa informação na resposta, mas fui editada.
textBox.Attributes.Add("readonly", "readonly");
e a explicação está no link
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin mencionou isso em seu comentário sobre esta resposta, mas eu queria destacá-lo, pois não consegui encontrar outros recursos sobre o envio de dados de um deficiente <select>
. Também acredito que seja relevante para a questão, pois os selects não são <input>
s, mas são "entradas" s.
Basta incluir um campo Oculto para a seleção desativada e está tudo classificado.
Exemplo:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Cuidado: isso colocará duas tags na página com o mesmo ID, o que não é um HTML válido e pode causar dores de cabeça com javascript. Para mim, eu tenho javascript para definir o valor da lista suspensa por seu html id
, e se você colocar o campo oculto primeiro, o javascript encontrará isso em vez de select
.
Normalmente, se eu tiver um campo que é "somente leitura", mas precisa ser enviado de volta ao servidor, desabilitarei a exibição (ou simplesmente texto), mas adicionarei um campo oculto com o mesmo nome. Você ainda precisa se certificar de que o campo não foi realmente modificado no lado do servidor - apenas não atualize a partir do modelo em sua ação - mas o estado do modelo ainda será preciso se houver erros.
Você também pode usar um código como este antes do envio do formulário:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
Por design, os navegadores não suportam isso.
Faça-os readonly
que permitam enviar valores ao servidor ou, se você estiver lidando com controles que ainda podem ser usados com readonly
atributos como Selecionar, adicione o estilo css pointer-events: none;
para torná-los não interativos
Tipo de hack, mas funciona! Também funciona quando você está enviando o formulário diretamente com o botão de envio, sem usar javascript. Nenhum trabalho extra necessário!
Por exemplo:
<select asp-for="TypeId"
asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
class="form-control form-control-sm"
readonly
style="pointer-events: none;">
</select>
quando estamos lidando com caixas de seleção desabilitadas, mas marcadas e queremos postar o valor, precisamos garantir que nosso campo oculto apareça antes do campo oculto @ Html.CheckBoxFor.
a seguir está o link de onde encontrei a resposta. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
expandindo Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); você pode usar:
$("#xxxForm").submit(function (e) {
e.preventDefault();
var form = this;
$('#Field1')[0].disabled = false;
$('#Field2')[0].disabled = false;
...
$('#FieldN')[0].disabled = false;
form.submit(); // submit bypassing the jQuery bound event
});
Isso ajudará a enviar valores de modelo em ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Eu costumo usar essa forma para CheckBox ou CheckBoxFor porque desabilitar está causando a perda do valor. Readonly também não funciona na caixa de seleção.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Basta colocar este script em scripts @section em sua página. isso habilitará entradas quando você enviar a página, e você deve redirecionar o usuário para outra página após o envio.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>