2017-01-13 16 views
2

私は単純なログインフォームを持っています。
すべては1つのことを除いて素晴らしい作品です。ページを入力すると、コントローラーにデータがポストされていない場合でも、常に妥当性検査が示されます(たとえば、フィールドが必要です。)。
実際にPOSTリクエストが行われたときにのみ検証を表示する方法はありますか?.NET Core:検証エラーを常に表示

ビュー

@model LoginViewModel 
<form asp-controller="User" asp-action="Login" method="post"> 
    <div asp-validation-summary="ModelOnly" class="text-danger"></div> 

    <label asp-for="Email"></label> 
    <input asp-for="Email" /> 
    <span asp-validation-for="Email"></span> 

    <label asp-for="Password"></label> 
    <input asp-for="Password" /> 
    <span asp-validation-for="Password"></span> 

    <button type="submit">Login</button> 
</form> 

のViewModel

public class LoginViewModel 
{ 
    [Required] 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 
    [Required] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 
} 

アクション:パウロはコメントで示唆したように

[HttpGet] 
[HttpPost] 
[AllowAnonymous] 
public async Task<IActionResult> Login(LoginViewModel model) 
    { 
     ClaimsPrincipal userClaims = _userRepository.TryLogin(model); 

     if (userClaims != null) 
     { 
      ... 
     } 
     return View(model); 
    } 
+0

[このSOの質問は興味を持っている必要があります](http://stackoverflow.com/q/20642328/463206).... [とこのSOの質問](http://stackoverflow.com/q/7390902/ 463206) – radarbob

+3

ログイン機能から '[HttpGet]'を取り出してみてください。 –

答えて

3

アクションのGetリクエストを防止する代わりに[Get]属性を削除し、アクションのモデルLoginViewModelがnullにならないget要求を処理する新しいコントローラアクションを作成する必要があります。例えば

[AllowAnonymous] 
public async Task<IActionResult> Login() 
{ 
    return View(new LoginViewModel()); 
} 

[HttpPost] 
[AllowAnonymous] 
public async Task<IActionResult> Login(LoginViewModel model) 
{ 
    ClaimsPrincipal userClaims = _userRepository.TryLogin(model); 

    if (userClaims != null) 
    { 
     ... 
    } 
    return View(model); 
} 

今、あなたの検証のみ無効なポストモデルの結果としてトリガされます。

+0

ありがとう!それがトリックでした。私はそれを1つの行動にとどめたかったが、このアプローチは少なくとも機能する。 –

+0

喜んで助けた。コマンドをクエリーから分離すると(getから投稿)、しばしば物事をより保守的にすることができます。 1つのメソッドでpostとgetの両方を処理することは、単一責任の原則に違反することは言うまでもありません。 –

関連する問題