¿Cómo puedo deshabilitar un cuadro de texto si hay errores de modelstate en mvc?

Estoy haciendo algunas cosas del servidor que podrían fallar (no es probable) pero algo puede salir mal. Quiero evitar que el usuario vaya más allá, así que quiero deshabilitar la entrada para que tengan que actualizar la página. ¿Cómo puedo deshabilitarlo en función de los errores de ModelState? Si existe algún error, deshabilite este cuadro y solo quiero hacerlo cuando la página se carga inicialmente. Mi problema no es necesariamente cómo hacerlo, sino cuál es el estándar y la mejor manera de hacerlo. Podría tener un ViewBag que contenga un verdadero falso para deshabilitarlo, pero no estoy seguro de si esa es la mejor ruta, ¿alguna sugerencia?

preguntado el 12 de junio de 12 a las 20:06

¿Qué tipo de cosas del servidor podrían fallar? Dado que está detectando errores en el lado del servidor, ya está enviando al cliente una nueva página cuando regresa View(model). -

¿Qué quieres decir con "Actualizar la página"? depende de usted lo que recibirán/verán cuando configure la vista en falla. Si prefiere su método, simplemente puede acceder a ModelState desde su vista y generar una entrada con un atributo deshabilitado en caso de error.

Lleno un cuadro combinado de la base de datos, digamos que la conexión falla por alguna razón. Ese tipo de falla, por lo que si se actualizan, todo podría estar bien:

Si obtiene un error en la llamada de servicio, puede envolver sus llamadas de servicio en un bloque de prueba/captura y enviar un mensaje de advertencia/información a la Vista. -

2 Respuestas

Supongamos que tiene una acción de controlador POST que realiza algún procesamiento y agrega errores al ModelState si falla, lo cual es bastante estándar. Ahora dentro de la vista podrías:

@Html.TextBoxFor(
    x => x.SomeProperty, 
    !ViewData.ModelState.IsValid ? new { @readonly = "readonly" } : null
)

o escriba un ayudante personalizado que hará el trabajo y simplificará las cosas para usted:

@Html.MyTextBoxFor(x => x.SomeProperty)

Podría ser útil si necesita este comportamiento para varios campos de entrada.

Respondido el 13 de junio de 12 a las 13:06

A menos que me falte algo, esto no funcionará. No siempre puedo deshabilitar el cuadro de texto en ModelState.IsValid. Si la conexión falla justo al comienzo de la carga, entonces debe deshabilitarse pero para agregar un poco más de detalle, este es un formulario de registro y si el usuario envía y tiene un nombre de usuario duplicado, estableceré un modelState error pero no quiero que el cuadro de texto esté deshabilitado o solo lectura en ese caso - Trampa

Lo siento, no entiendo tu escenario. - darin dimitrov

Básicamente, necesito que el cuadro de texto esté deshabilitado si se produce un error del servidor al cargar la página usando ModelState, pero si se envía el formulario y hay errores de ModelState, no quiero deshabilitar el cuadro de texto porque podría no ser un error del servidor cuando el formulario se envía, podría ser simplemente una condición de validación. De todos modos, marcaré su respuesta como aceptada porque tomé su respuesta, agregué un ViewBag que habilitará o deshabilitará el cuadro de texto en función de cualquier error del servidor y el método que establece el viewBag solo se ejecutará en la "carga de formulario" o el GET. - Trampa

Puede averiguar si el formulario es válido con jquery:

if($('form').valid()){

}

Respondido el 13 de junio de 12 a las 06:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.