working section scripts not net mvc from form asp c# .net javascript asp.net-mvc

section - razor c#



¿Cómo presento entradas deshabilitadas en ASP.NET MVC? (8)

@ppumkin mencionó esto en su comentario sobre esta respuesta, pero quería resaltarlo ya que no pude encontrar otros recursos para enviar datos de una <select> deshabilitada. También creo que es relevante para la pregunta, ya que las selecciones no son <input> s, sino que son "input".

Solo incluya 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 pondrá dos etiquetas en la página con la misma ID, que no es realmente válida HTML y podría causar dolores de cabeza con javascript. Para mí, tengo javascript para establecer el valor del menú desplegable por su id Html, y si pones el campo oculto primero, el javascript lo encontrará en lugar de select .

¿Cómo presento entradas deshabilitadas en ASP.NET MVC?


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 en la respuesta, pero me editaron.


Normalmente, si tengo un campo que es "de solo lectura" pero que debe enviarse nuevamente al servidor, desactivo la visualización (o simplemente texto), pero luego agrego un campo oculto con el mismo nombre. Aún debe asegurarse de que el campo no se haya modificado 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.


Puede crear una plantilla de editor como la siguiente

CSS

.disabled { background-color:lightgray; }

Plantilla del editor

@model string @Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })


Simplemente haga esa propiedad [Obligatorio] en el modelo de vista vinculado a esa vista.


También puede usar un código como este antes de enviar el formulario:

$(":disabled", $(''#frmMain'')).removeAttr("disabled");



¿No puedes hacer el campo readonly="readonly" lugar de disabled="disabled" ? Se enviará un valor de campo de solo lectura al servidor y el usuario aún no podrá editarlo. Sin embargo, una etiqueta SELECT es una excepción.