textboxfor net mvc from form data asp asp.net-mvc

from - asp.net MVC: deshabilita un TextBox



mvc textbox value (2)

Tengo un Html.TextBox () y necesito desactivarlo en ciertas condiciones. Con el TextArea va así:

<%=primaryLang ? Html.TextArea("e.location", new { rows = 2, cols = 60 }) : Html.TextArea("e.location", new { rows = 2, cols = 60, disabled = "true" })%>

Pero con TextBox no es posible:

<%=primaryLang ? Html.TextBox("e.startDate") : Html.TextBox("e.startDate", new { disabled = "true"})%>

Se emitirá {disabled = true} en el valor. Esto se debe a que la única función que le permitirá pasar HtmlAttributes también requerirá que se pase el modelo. Esta vista está fuertemente tipada y el modelo se completa automáticamente.

Si lo paso así:

Html.TextBox("e.startDate", Model.e.startDate, new { disabled = "true"})

o así:

Html.TextBox("e.startDate", null, new { disabled = "true"})

la versión GET funcionará, pero la versión POST emitirá una NullReferenceException. Los dos anteriores parecen tener exactamente el mismo efecto. Ambos presentarán los datos correctos del modelo en GET.

Si lo dejo así de lujuria:

Html.TextBox("e.startDate")

Funcionará correctamente, tanto para POST como para GET ...

¿Por qué? ¿Alguna forma de lograrlo?

¡Gracias! :)

Gracias a las respuestas a continuación, lo resolví así:

<%=primaryLang ? Html.TextBox("e.startDate") : Html.Hidden("e.startDate") + Html.TextBox("e.startDate", null, new { disabled = "true"})%>


En el POST, la propiedad "Modelo" o "e" es probablemente nula.

Podrías probar esto:

<%if (Model != null && Model.e != null) { %> <%=Html.TextBox("e.StartDate", Model.e.StartDate, primaryLang ? null : new { disabled = "disabled" })%> <%}%>


Los elementos HTML deshabilitados no se publican en el servidor. Es por esto que obtiene una NullReferenceException cuando logra deshabilitar su elemento.

No estoy seguro de lo que está intentando lograr, pero si no está permitiendo que e.startDate sea editable, no debería necesitar que se vuelva a publicar, ya que ya debería saber el valor. Así que tienes dos opciones.

  1. Muestre e.startDate tal como era, pero simplemente configure el valor e.startDate en su método de publicación en el valor predeterminado o ignórelo por completo.
  2. Si necesita que se devuelva el valor, entonces muestre e.startDate como una etiqueta, luego agregue un campo oculto que contenga e.startDate para su valor de devolución publicado.

Advertencia : el hecho de que el elemento esté deshabilitado no significa que alguien no pueda editar el valor y volver a publicarlo. Es sólo una recomendación. Depende del navegador cómo mostrar el campo. Si su código POST acepta el valor e.startDate, cualquier persona con acceso puede editar ese campo utilizando herramientas de desarrollo.