2013-06-06 153 views
3

我想驗證登錄頁面上的用戶輸入。 我有我User mode有:ASP.MVC客戶端驗證不起作用

  • 用戶名字符串
  • 串密碼

我決定延長與部分類我的DB模式:

[MetadataType(typeof(User))] 
public partial class User : IUser 
{ 

} 

public interface IUser 
{ 
    [Required(ErrorMessage = "Login is required")] 
    string UserName { get; set; } 

    [Required(ErrorMessage = "Password is required")] 
    string Password { get; set; } 
} 

而且我view

@using (Html.BeginForm("Login", "Account", FormMethod.Post)) 
    { 
     @Html.ValidationSummary(true)  
     @Html.TextBoxFor(model => model.UserName, new { size = 30, @placeholder = "Login",  
     @class = "credential" }) 
     @Html.ValidationMessageFor(model => model.UserName) 
     @Html.PasswordFor(model => model.Password, new { size = 30, @placeholder = 
    "Password", @class = "credential" }) 
     @Html.ValidationMessageFor(model => model.Password) 
    } 

而不是客戶端驗證,它使模型中的空值回發和崩潰。

this question我加

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

到視圖頂部,確信腳本加載:

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

我缺少什麼?

+1

在瀏覽器中是否有任何錯誤? –

+0

沒有任何錯誤,它在'Model.Designer.cs'中崩潰,並且不會通過'ModelState.IsValid'通過 – makambi

+1

http://www.codeproject.com/Articles/275056/Custom-Client-Side-Validation- in-ASP-NET-MVC3 –

回答

1

似乎與您對接口屬性而不是類屬性進行驗證有關。

檢查DOM元素。它應該是這樣的用戶名:

<input class="credential" data-val="true" data-val-required="Login is required" id="UserName" name="UserName" placeholder="Login" size="30" type="text" value=""> 

注意數據-VAL-VAL-所需的數據&屬性。這些由js驗證邏輯使用。

當我嘗試使用您的接口屬性驗證時,這些缺失。

也許你應該使用視圖模型而不是模型?這樣您就可以根據視圖要求來定製它。

編輯

其實,只要在Razor視圖您@model聲明引用IUSER而不是用戶。

@model IUser 
+0

隨着模型在其他視圖上工作正常,通過界面添加驗證似乎是合乎邏輯的,而不是創建視圖模型。 我的輸入沒有'data-val'和'data-val-required',所以是的,你是對的)謝謝 你有沒有試過提供接口驗證(除了我的接口)?也許我錯過了這個 – makambi

+0

不,我從來沒有使用接口驗證。原因是我從不在視圖上使用模型。我使用ViewModel。對我來說,使用ViewModel方法更有意義,因爲我們可以在其上引入視圖邏輯 - 所以驗證,包含下拉項目的集合等等。這些模型不會真正出現在模型中,因爲它更關注業務邏輯。 –

+0

剛剛更新我的答案 - 似乎工作得很好 –