2011-04-12 19 views
41

En mi punto de vista que tienen el elemento siguienteASP.Net MVC3 Html.PasswordFor no llena

@Html.PasswordFor(model => model.Password) 

Esto es en una pantalla que crea/actualizaciones de datos de usuario. Cuando intento actualizar al usuario, este campo permanece en blanco. Cuando cambio este elemento a un TextBoxFor obtiene los datos. ¿Cómo llego a poblar el campo Contraseña?

+8

Si tiene la contraseña del usuario para poder poner en la caja, ha cometido un mal (casi) imperdonable. – SLaks

+0

Creo que un caso válido para esto es si desea que el campo de contraseña muestre puntos o no puntos para indicar si una contraseña ya existe o no. Al completar su modelo, podría decir 'model.Password = String.IsNullOrEmpty (user.Password)? "": "********"; ', pero' PasswordFor' no usará el valor. Entonces no puedes dar una indicación de si existe un valor. – xr280xr

Respuesta

35

Esto es como diseñado. Las contraseñas no se rellenan para evitar reenvíos accidentales y para evitar que la página contenga contraseñas no cifradas. Obviamente, la contraseña era incorrecta para empezar si está volviendo a publicar las credenciales.

En su caso, podría crear una extensión que ingrese los datos, o simplemente usar una entrada HTML de tipo contraseña.

4

MVC le protege de hacer algo como esto por una razón. En realidad, no debería poder hacer esto porque la contraseña de los usuarios no se debe almacenar sin encriptar ni deshabilitar. Si su objetivo es poner fin a terminar en http://plaintextoffenders.com/ embargo, usted puede hacer algo como:

<input type="password" name="Password" id="Password" value="@Model.Password" /> 
+0

con respecto a plaintextoffenders, buen sitio, pero el texto de la sección "comentarios" apenas se ve. mira esto: http: //plaintextoffenders.com/about/ ... ¡¿tal vez es un juego de palabras ?! –

121

Como se describió anteriormente, es mejor evitar hacer esto por razones de seguridad. si todavía quieres que persista la contraseña para que se procede desde donde la validación actual ha fallado, se puede utilizar el asistente de HTML con el parámetro de atributos HTML:

 Html.PasswordFor(x => x.Password, new { value = Model.Password}) 
+0

su asnwer funciona para mí, gracias. –

+14

¡esta respuesta en realidad está respondiendo la pregunta! – Stian

+0

matmat es el hombre! – contactmatt

0

yo encontramos este workaound. Necesitaba mi contraseña se muestra en la forma:

@model User 
@{ 
    @Html.Label(Model.Username, new { @class = "label" }) 
    @Html.TextBoxFor(Model => Model.Username, new { @class = "form-control" }) 

    @Html.Label(Model.Password, new { @class = "label" }) 
    @Html.TextBoxFor(Model => Model.Password, new { @class = "form-control make-pass" }) 
} 

<script type="text/javascript"> 
    $(".make-pass").attr("type", "password"); 
</script> 

Esto hará que su entrada a escribir la contraseña sin perder el valor.

+0

¡Es genial! Puedes poner el script en tu 'Sitio.js' y utilícelo en cualquier contraseña (ese era mi requisito) –