2012-05-04 15 views
6

Estoy utilizando un modelo fuertemente tipado para mi vista. Tengo un cuadro de texto desactivado cuyo valor actualizo usando javascript. El cuadro de texto se representa utilizando esteasp.net mvc cuadro de texto deshabilitado actualizado por javascript no publica nuevo valor

<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%> 

Esto hace que un cuadro de texto con el nombre y ID como 'TotalAmount'. TotalAmount también es una propiedad de mi modelo que se une a esta vista.

El javascript para actualizar su valor en la vista es como esto dentro de su función:

document.getElementById('TotalAmount').value = {assigning new value here}; 

La función se consiga llamar y puedo ver el valor en el cuadro de texto desactivado cuando cambio algún valor en otro editable caja de texto. Sin embargo, cuando publico esta forma a mi método de acción de la siguiente manera:

[HttpPost] 
public ActionResult Process (ProcessVM FormPostVM) 
{ 
} 

los discapacitados propiedad de texto [TotalAmount] todavía tiene el valor antiguo, pero el cuadro de texto editable, que he modificado contiene el nuevo valor entré. ¿Por qué el cuadro de texto deshabilitado no contiene el valor actualizado de JavaScript?

He intentado utilizar

ModelState.Remove("TotalAmount"); 

en el método de la acción anterior, pero como ya pensé que no funcionó.

¿Alguna pista, consejos?

Gracias por su tiempo .... Los elementos de entrada

+0

4 respuestas en un minuto y que son los correctos. – tkt986

Respuesta

23

HTML, como cuadros de texto que tienen el atributo disabled="disabled" nunca va a enviar a sus valores al servidor cuando se envía el formulario. Si desea enviar el valor al servidor al mismo tiempo incapacitante que el usuario cambie lo que podría hacer que el cuadro de texto readonly:

<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %> 
+0

+1 por ejemplo de cómo configurar solo – user20358

+0

@Darin Dimitrov, dijiste "... nunca enviarán sus valores al servidor ...". ¿Es esta una regla general o MVC específica? También su solución es para cuadros de texto. ¿Qué pasa con los elementos 'select'? –

+0

@Anar, esto no tiene nada que ver con ASP.NET MVC. Es HTML básico. Y es cierto para todos los elementos de entrada incluyendo 'select'. –

3

Si lo cambia a utilizar readonly en lugar de disabled, entonces esto debe darle la misma funcionalidad, pero publique el valor.

4

entradas movilidad nunca se envían en un formulario de presentar, trate de usar readonly atributo lugar o entradas ocultas

4

campos movilidad no llegan a ser destinadas. Intente tener un campo de formulario oculto que enviará el valor al servidor y establecer tanto TotalAmount como el campo de formulario oculto. En el servidor, use el valor para el campo oculto en su lugar.

En una nota lateral, ya que esto parece el total del pedido, esto es algo que recalcularía en el servidor en lugar de abrir la posibilidad de que alguien piratee el html y obtenga un descuento en su producto.

EDIT: Para los puntos del otro, me había olvidado del atributo readonly. Eso también funcionará

+0

+1 por consejo de seguridad – user20358

1

Los navegadores no vuelven a publicar los valores en los controles de entrada deshabilitados, como ha descubierto. Probablemente la forma más fácil de evitar esto es enlazar el envío del formulario y volver a habilitar la entrada a medida que se envía el formulario; el usuario no tendrá la oportunidad de editar el valor, y debería publicarse con el resto de la solicitud.

Creo que el último número describió: solicitar a cabo:

Retrieving the value of a asp:TextBox

Cuestiones relacionadas