2016-08-11 9 views
0

私は、ASP.Net IDを使用してユーザーを管理するASP.Net MVCサイトを持っています。2つではなく1つだけのレジスタエラーを表示

私は、ユーザーの電子メールも彼のユーザー名であるというデフォルトのメカニズムを使用します。すでに取り込まれている電子メールに登録する場合、2つのエラーメッセージが表示されます。

登録フォームの構造:

How the Register form looks like

HttpPost AccountControllerの登録方法:

public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser {UserName = model.Email, Email = model.Email}; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded) 
     { 
      string callbackUrl = 
       await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account"); 

      return View("Info"); 
     } 
     AddErrors(result); 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

にはどうすればいいだけのユーザーに電子メールのエラーメッセージを表示することができますか?

+2

あなたの 'AddErrors()'メソッドを 'ModelState.AddModelError(" "、String.Format(" {0}はすでに使用されています "、model.Email)で置き換えてください;); –

+0

Works。好奇心の外に:他のエラーはどのように追加されますか? (例えば、2つのパスワードフィールドが一致しないなど)これらのメソッドにも追加されていると思いました。私は間違っていたことが分かります。 @StephenMuecke –

+1

あなたの検証属性のために追加されます。 'ConfirmPassword'プロパティに' [Compare] 'が適用されています。 'DefaultModelBinder'は、バインディングプロセス中に' ModelState'エラーを追加します。 –

答えて

1

ビューで@Html.ValidationMessageFor(m => m.Email)を含めて、メッセージではなく要約

ModelState.AddModelError("Email", String.Format("{0} is already taken", model.Email)) 

よりも、フォームコントロールに関連付けるしている場合は

ModelState.AddModelError("", String.Format("{0} is already taken", model.Email)) 

か、とあなたAddErrors()方法を交換してくださいサイドノート:RemoteAttributeを使用して、フォームを送信する前にクライアント側の検証を受けるようにすることもできます。How to: Implement Remote Validation in ASP.NET MVCを参照してください(ただし、上記のコードは(まれに)ケース2のユーザーは同じEmailを同時に送信します)。

+0

答えてくれてありがとう、ただ1つのエラーが表示されますが、パスワードが検証を通って失敗すると、同じエラーが表示されます。どうすれば修正できますか? –

+0

複数のエラーを追加できます。 '' ModelState.AddModelError( ""、 "Another error") 'あなたが何をしているのかわからないので、パスワードの検証に何も表示していません。モデルプロパティに適用された検証属性を参照していますか? –

+0

これでif節で修正されました。それが電子メールのエラーであれば、私はあなたがしたことを行い、そうでなければAddErrorsメソッドを呼び出します。 –

関連する問題