2013-11-01 55 views
1

我有一個簡單的強類型視圖。必需屬性不能在asp.net工作mvc

@model GoldForGold.Models.LogonModel 
@{ 
    ViewBag.Title = "Logins"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Logins 
@using (Html.BeginForm()) { 

Account Information 
@Html.LabelFor(m => m.UserName) 
@Html.TextBoxFor(m => m.UserName, new { id = "txtUserName" }) 
@Html.ValidationMessageFor(m => m.UserName) 
@Html.LabelFor(m => m.Password) 
@Html.PasswordFor(m => m.Password, new { id = "txtPassword" }) 
@Html.ValidationMessageFor(m => m.Password) 
@Html.CheckBoxFor(m => m.RememberMe) 
@Html.LabelFor(m => m.RememberMe) 

<input type="submit" value="Log On" onclick="getcredentials()" /> 
} 

模型代碼在這裏。

public class LogonModel 
{ 
    [Required(ErrorMessage="please enter username")] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

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

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 

即使沒有輸入用戶名和密碼,我也看不到任何事情發生。

+0

你能告訴我們您的Post操作方法。 – WannaCSharp

回答

5

對於客戶端驗證,你需要jQuery和jQuery驗證。

該客戶端驗證後,必須配置啓用:

ModelState.IsValid; 
0

jquery.validate.js/jquery.validate.unobtrusive.js是否包含在您的項目中?它的奇怪,你的代碼對我來說很好。

This link may help you...

27

下面是完整的解決方案:

<appSettings> 
... 
<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

服務器端驗證您可以檢查您的驗證狀態

  1. 將以下腳本添加到您的視圖中:

    <script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>  
    <script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'>   </script> 
    <script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script> 
    
  2. Web.Config中啓用驗證:

    <appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    
  3. 添加驗證元素在視圖中:

    @Html.ValidationMessageFor(model => model.UserName) 
    
  4. 添加所需的屬性給你model`s元素。

    [Required(ErrorMessage="please enter username")] 
    public string UserName { get; set; } 
    
3

根據記錄,您可以包括在您的視圖的末尾下面的代碼,以確保該[Required]屬性在用戶界面中彈出:

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
-5
  • 解決方案步驟:

1-添加要查看的腳本:

<script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>  
<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'>   
</script> 
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script> 

2-在Web中啓用驗證。配置:在視圖

<appSettings> 
<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

3-添加驗證HTML輔助:

@Html.ValidationMessageFor(model => model.UserName) 

4-添加必需屬性到您的model`s元素:

[Required(ErrorMessage="please enter username")] 
public string UserName { get; set; } 
+2

你基本上覆制了Vahagn Nahapetyan的答案。 – TheWanderingMind

0

另外一個疑難雜症與[Required]在整數字段上使用它(不僅在存儲數字值時,而且在下拉列表中存儲所選值的ID時)。這是行不通的,因爲整數屬性永遠不能爲空,並且默認值爲零,所以總會有一個值。

在您需要確保現場這種情況下,被聲明爲一個空整數,而不僅僅是一個整數或要求將沒有任何效果。例如。

[Required] 
public int? LanguageId { get; set; } 

或交替使用Range屬性停止零是可接受值:

[Range(1, int.MaxValue)] 
public int? LanguageId { get; set; }