2017-06-26 18 views
1

Individual User Authenticationプロジェクトテンプレートを使用してASP.NET Core apppを作成すると、デフォルトのResetPassword.cshtmlビューが作成されます。その中でView私はreadonlyとしてログインユーザー名入力タグを設定する必要があります。しかし、次のような検証エラーが発生します。私がそれを作っていなければ、readonly以下の画面では、ユーザーはパスワードを変更することができます。読み取り専用入力属性と[必須]データでの検証エラー

質問:フォーム提出時に次の検証エラーが発生した理由 - UserName入力タグがreadonlyに設定されていると、入力タグが無効の場合、フォーム提出は入力タグの値を提出しません(また、@AdamBellairehereで説明されています)。 public string UserName { get; set; }[Required]注釈は入力タグのreadonly属性と何らかの形で矛盾しているようです。

enter image description here

public class ResetPasswordViewModel 
{ 
    [Required] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string Code { get; set; } 
} 

UPDATE

ResetPassword.cshtml:[これは、VS2017で作成されたデフォルトのビューです。唯一の変化はI]は、以下のinputタグでは、このような状況で

@model ResetPasswordViewModel 
... 
<input asp-for="@User.Identity.Name" class="form-control" readonly /> 
... 
+0

[必須]をプロパティから削除してみませんか? – Will

+0

@Willユーザーを作成したり、パスワードをリセットしたりするときには、まずユーザー名が必要です。私は 'Reset Password UI'で読み込み専用にしているので、ユーザーはそれを間違えないようにします。 – nam

+0

名前を削除するためにフォームを変更するか、スパンに表示するだけですか?私はパスワードリセットが他の何かをする必要があるとは思わないでしょう... – Will

答えて

0

readonly属性を追加し、それは本当にビューで@User.Identity.Nameは、ビューモデルにUserNameにバインドすることを期待しても意味がありませんということです。

IDEが生成したコードが間違っているようです。たぶんどこかで台無しにされた足場テンプレートは、知っている。

asp-forUserNameに変更する必要があります。下記参照。

<input asp-for="UserName" class="form-control" readonly /> 

これは助けになりました!

関連する問題