0

アプリケーションの RegisterModel の編集で 2 つの問題が発生しています。

A) フィールド UserName と Email はパスワード フィールドとしてレンダリングされますか?

B) モデル状態は常に無効です (そして私のモデルは空です)

「LoginModel」と「RegisterModel」プロパティを含む「HomeModel」があり、対応するプロパティではなく HomeModel 全体を渡すため、両方が原因だと思います。どうすれば正しいものを渡すことができますか?

私は次のフォームを持っています:

@using (Ajax.BeginForm("Register", "Account", new AjaxOptions { UpdateTargetId = "RegisterAjaxResponse" }))
                        {
                        @Html.AntiForgeryToken()
                        @Html.ValidationSummary(true)
                        <div class="form-row">
                            <div id="RegisterAjaxResponse"></div>
                        </div>
                        <div class="form-row">
                            @Html.LabelFor(m => m.RegisterModel.UserName)
                            @Html.PasswordFor(m => m.RegisterModel.UserName)
                            @Html.ValidationMessageFor(m => m.RegisterModel.UserName)
                        </div>
                        <div class="form-row">
                            @Html.LabelFor(m => m.RegisterModel.Password)
                            @Html.PasswordFor(m => m.RegisterModel.Password)
                            @Html.ValidationMessageFor(m => m.RegisterModel.Password)
                        </div>
                        <div class="form-row">
                            @Html.LabelFor(m => m.RegisterModel.ConfirmPassword)
                            @Html.PasswordFor(m => m.RegisterModel.ConfirmPassword)
                            @Html.ValidationMessageFor(m => m.RegisterModel.ConfirmPassword)
                        </div>
                        <div class="form-row">

                            @Html.LabelFor(m => m.RegisterModel.Email)
                            @Html.PasswordFor(m => m.RegisterModel.Email)
                            @Html.ValidationMessageFor(m => m.RegisterModel.Email)
                        </div>
                        <div class="form-row">
                            <input type="submit" value='Register' />
                        </div>
                        }

モデル:

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    [DataType(DataType.Text)]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "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; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "EmailAddress")]
    public string Email { get; set; }    
}

ただし、UserName フィールドと Email フィールドはパスワード フィールドとして表示されます。 http://i.imgur.com/GCamint.png -まだ画像をページングできません。申し訳ありません。

そして、私のモデル状態は常に無効です。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
    string returnValue = "";
    if (ModelState.IsValid)
    {
    //Some code that is never executed
    }
    return Content(returnValue, "text/html");
}
4

2 に答える 2

1

問題 A: @Html.PasswordFor() を使用して電子メールとユーザー名のテキスト フィールドをレンダリングしています。これにより、パスワード フィールドがレンダリングされます。@Html.TextboxFor() を使用してみてください。

問題 B については、MVC3 と 4 のどちらをターゲットにしているか、および .NET のバージョンによって異なります。それ以降のバージョンの .NET では、compare アノテーションを次のように使用します。

[Compare(CompareField = Password, ErrorMessage = "Passwords do not
match")]
于 2013-06-09T12:48:55.793 に答える
0

a) かみそりのビューを持っているため

  @Html.PasswordFor(m => m.RegisterModel.UserName)

する必要がある

@Html.TextboxFor(m => m.RegisterModel.Email)
于 2013-06-09T12:49:47.363 に答える