Модель не применяется DataType.Password

Вместо непосредственного использования объекта в простом представлении Razor у меня есть форма, использующая в качестве объекта + s model объект декоратора.

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

    public TestServiceModel TestService { get; set; }
}

beeing TestServiceModel представлен как

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; }
}

Примечание свойство Password, украшенное DataType.Password

а в Partial Razor view у меня есть вызов этого объекта

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

проблема заключается в том, что в html я получаю type="text" вместо text="password"

Вы можете увидеть в это изображение весь поток:

enter image description here

Что я отсутствует здесь?

Ответ 1

Вы должны использовать Html.Password или даже лучше использовать Html.EditorFor, который будет читать DataType.Password и выводит ввод типа пароля для вас.

Html.TextBoxFor - это текстовый ввод, а не как пароль.

Ответ 2

В ответ на ответ Kieron в MVC3 на самом деле НЕ рекомендуется использовать Html.EditorFor для ввода пароля, по какой-то причине, если сервер возвращает страницу (например, комбинация паролей имени пользователя неверна), то с помощью редактора, пароль передается обратно на страницу (и источник просмотра - это видимый пароль)

При использовании Html.PasswordFor пароль не передается клиенту.