2011-05-18 7 views
10

En lugar de usar el objeto directamente, en una simple Razor View tengo un formulario que utiliza como es + model un objeto decorador.El modelo no aplica DataType.Password

public class GlobalAccount 
{ 
    public GlobalAccount() 
    { 
     this.TestService = new TestServiceModel(); 
    } 

    public TestServiceModel TestService { get; set; } 
} 

beeing TestServiceModel representa como

public class TestServiceModel 
{ 
    [Required] 
    [Display(Name = "Endpoint (url of your service like http://mydomain/remote/)")] 
    public string Endpoint { get; set; } 

    [Required] 
    [Display(Name = "System username")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "System password")] 
    public string Password { get; set; } 
} 

Nota la propiedad Password decorado con DataType.Password

y en una Partial Razor view tengo una llamada a ese objeto

@model OnlineServices.Administration.Models.GlobalAccount 
... 
@Html.TextBoxFor(model => model.TestService.Password, new { size = "30" }) 

problema es que, en el html consigo type="text" en lugar de text="password"

Se puede ver en todo el flujo this image:

enter image description here

¿Qué soy yo falta aquí?

Respuesta

19

Debe utilizar Html.Password, o incluso mejor utilizar Html.EditorFor que leerá la entrada de un tipo de contraseña DataType.Password y salida para usted.

El Html.TextBoxFor es solo una entrada de texto, no una contraseña.

+0

mudo ... tan simple como tan lejos! Simplemente lo pasé por alto ... siempre estaba pensando en algo malo en el modelo y nunca vi con mis propios ojos la vista: -/** NECESITO VACACIONES! **: o) – balexandre

+1

Es fácil pasar por alto. – Kieron

+2

Considere utilizar Html.PasswordFor en su lugar (vea la respuesta de @Skuld a continuación) –

14

Además de la respuesta de Kieron, en MVC3 NO es mejor utilizar Html.EditorPara las entradas de Contraseña, como por alguna razón, si el servidor devuelve la página (digamos que el combo de contraseña de nombre de usuario es incorrecto) entonces con EditorFor, la contraseña se transmite de vuelta a la página (y una fuente de vista la contraseña es visible)

Al usar la contraseña Html.La contraseña no se transmite al cliente.

+1

El servidor aún devuelve la contraseña en MVC 5. Otra solución es seguir adelante y usar 'DataType.Password' y' Html.EditorFor', pero tener el El controlador borra la contraseña antes de devolver la vista (como en 'viewModel.Password = null'). – Theophilus

Cuestiones relacionadas