¿Cómo envío una entrada deshabilitada en ASP.NET MVC?
¿Cómo envío una entrada deshabilitada en ASP.NET MVC?
Respuestas:
¿No puedes hacer el campo en readonly="readonly"lugar de disabled="disabled"? Se enviará un valor de campo de solo lectura al servidor sin que el usuario lo pueda editar. Sin SELECTembargo, una etiqueta es una excepción.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>¿cómo puedo atenuarlo para que visualmente parezca que no es editable? Mejor aún, ¿podemos usar algo similar a LabelFor? Probé LabelFor pero solo obtiene el DisplayName ...
type="checkbox"entradas
Gracias a todos:
La forma en que resolví esto:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Nota:
Obtuve esta información sobre la respuesta, pero me editaron.
textBox.Attributes.Add("readonly", "readonly");y la explicación está en el enlace
$("#textBoxId").css("color", "#c0c0c0").
@ppumkin mencionó esto en su comentario sobre esta respuesta, pero quería resaltarlo porque no pude encontrar otros recursos sobre el envío de datos de un discapacitado <select>. También creo que es relevante para la pregunta, ya que las selecciones no son <input>s, pero son "entradas".
Solo incluye un campo oculto para la selección deshabilitada y todo está ordenado.
Ejemplo:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Precaución: esto colocará dos etiquetas en la página con el mismo ID, que no es HTML realmente válido y podría causar dolores de cabeza con javascript. Para mí, tengo javascript para establecer el valor del menú desplegable por su html id, y si pones el campo oculto primero, el javascript lo encontrará en lugar de select.
Por lo general, si tengo un campo que es de "solo lectura" pero debe enviarse de nuevo al servidor, desactivaré la visualización (o simplemente texto), pero luego agregaré un campo oculto con el mismo nombre. Aún debe asegurarse de que el campo no se modifique realmente en el lado del servidor, simplemente no lo actualice desde el modelo en su acción, pero el estado del modelo seguirá siendo preciso si hay errores.
También puede usar un código como este antes de que se envíe el formulario:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm?
Por diseño, los navegadores no lo admiten.
Hágalos, lo readonlyque permite enviar valores al servidor o si está tratando con controles que aún se pueden usar con readonlyatributos como Seleccionar, agregue un estilo CSS pointer-events: none;para que no sean interactivos
Es una especie de truco, ¡pero funciona! También funciona cuando envía un formulario directamente con el botón Enviar sin usar javascript. ¡No se requiere trabajo adicional!
P.ej:
<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>
cuando estamos tratando con casillas de verificación deshabilitadas pero marcadas y queremos publicar el valor, debemos asegurarnos de que nuestro campo oculto aparezca antes del campo oculto @ Html.CheckBoxFor.
el siguiente es el enlace desde donde encontré la respuesta. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
expandiendo Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); puedes 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
});
Esto ayudará a enviar los valores del modelo en ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Por lo general, uso esta forma para CheckBox o CheckBoxFor porque desactivarlo hace que se pierda el valor. Readonly tampoco funciona en la casilla de verificación.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Simplemente coloque este script en @section scripts en su página. esto habilitará las entradas cuando envíe la página, y debe redirigir al usuario a otra página después de enviarla.
<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>