2017-03-02 12 views
0

私はこのような人たちの他の例を調べようとしました:example。 しかし、まだ動作していません。MVC 4必須属性が機能しない

私のクラス次のようになります。

[Required] 
    public string UserName { get; set; } 
    [Required] 
    public string Password { get; set; } 

コントローラー:

public ActionResult Login(string UserName, string password) 
    { 
     return View(); 
    } 

マイビューはクラスに基づいて..しかし、まだそれは私が何もで入力されていないにもかかわらず、送信ボタンを押してくださいすることができますされます。

ヘルプ?

public ActionResult Login(LoginModel loginModel) 
{ 
.... do stuff here .... 

    return View(); 
} 

はまた、あなたが

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> 

あなたのビューに含まれていることを確認してください

+1

クライアント側の検証が有効になっていますか?そうでない場合は、検証するサーバーに戻り、ModelStateは結果として検証に失敗します – LDJ

+1

私の知る限り、属性UserNameとパスワードを直接Loginアクションに渡します。代わりに必須フィールドを含むモデルを渡してみてください。 – Lys

+1

ここではモデルが全く指定されていないのですか?上に示した 'UserName'と' Password'は、クラス内のものと関連していないようです。パラメータのタイプをクラスの名前に変更する必要があります。 'public ActionResult Login(LoginModel model)' – G0dsquad

答えて

1

その後、

public class LoginModel{ 

[Required(ErrorMessage = "Username cannot be empty")] 
public string UserName { get; set; } 
[Required(ErrorMessage = "Password cannot be empty")] 
public string Password { get; set; } 

} 

を試してみて、あなたの行動でそれを使用

こちらをお読みください:あなたはこのクラスを使用している場合はビューがレンダリングされると

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

コントローラが

public ActionResult Login() 
{ 
    return View(new LoginModel()); 
} 

それは控えめな検証データの属性をレンダリングする(応用検証属性を持つ)モデルを使用しています

1

。 jquery.validate.unobtrusive.jsがクライアント側の検証を行うために使用する属性。ポストに

[HttpPost] 
public ActionResult Login(LoginModel model) 
{ 
    if(this.ModelState.IsValid) 
    { 
      // do something 
    } 
    else 
    { 
     return View(model); 
    } 
} 

あなたはあなたがあなたのモデルを飾ったという属性の検証を使用して、再びにModelStateを埋めるためにモデルバインダーで使用されているので、引数として同じLoginModelを使用する必要があります。

+0

私のコメントを見てください私は今追加しました – oneman

0

は、私はあなたがコントローラでこのチェックを行うことができますアレックス・アートの答えに同意し、彼の答えにに追加:

[HttpPost] 
public ActionResult Login(LoginModel model) 
{ 
    if(string.IsNullOrWhiteSpace(model.UserName) 
    { 
      ModelState.AddModelError("UserName","This field is required!"); 
      return View(model); 
    } 

    /* Same can be done for password*/ 

    /* I am sure once the user has logged in successfully.. you won't want to return the same view, but rather redirect to another action */ 

    return RedirectToAction("AnotherAction","ControllerName"); 

} 

私はこのことができます願っています。

関連する問題