2011-07-15 20 views
3

何か変なことが起こっています。MVC 3クライアント側の比較検証

私は基本的な形式を持っている:

<% using (Html.BeginForm()) 
     { %> 
     <%: Html.LabelFor(model => model.user.email) %> 
     <%: Html.TextBoxFor(model => model.user.email) %> 
     <%: Html.ValidationMessageFor(model => model.user.email) %> 
     <br /> 
     <%: Html.LabelFor(model => model.user.password) %> 
     <%: Html.PasswordFor(model => model.user.password) %> 
     <%: Html.ValidationMessageFor(model => model.user.password) %> 
     <br /> 
     <%: Html.LabelFor(model => model.user.confirmPassword) %> 
     <%: Html.PasswordFor(model => model.user.confirmPassword) %> 
     <%: Html.ValidationMessageFor(model => model.user.confirmPassword) %> 
     <br /> 
     <input type="submit" value="Submit" /> 
    <% } %> 

頭には、次のものがあります。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<link rel="Stylesheet" type="text/css" href="/Content/Site.css" /> 
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> 

ViewModelにはこれです:常にパスワードとconfirmPassword間の検証を比較

public class RegisterViewModel 
{ 
    public RegisterUser user { get; set; } 
} 

public class RegisterUser 
{ 
    [Required] 
    [Display(Name = "Email Address")] 
    public string email { get; set; } 

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

    [Required] 
    [Display(Name = "Confirm Password")] 
    [Compare("password")] 
    public string confirmPassword { get; set; } 
} 

は言う:
'パスワードの確認'と 'パスワード'が一致しません。
私は、彼らが

と一致しないことがわかっている場合でも、ここで奇妙な部分です:私は、ビューページから最初のフィールドを削除すると、すべての作品が。

それだけで

<% using (Html.BeginForm()) 
    { %> 
    <%: Html.LabelFor(model => model.user.password) %> 
    <%: Html.PasswordFor(model => model.user.password) %> 
    <%: Html.ValidationMessageFor(model => model.user.password) %> 
    <br /> 
    <%: Html.LabelFor(model => model.user.confirmPassword) %> 
    <%: Html.PasswordFor(model => model.user.confirmPassword) %> 
    <%: Html.ValidationMessageFor(model => model.user.confirmPassword) %> 
    <br /> 
    <input type="submit" value="Submit" /> 
<% } %> 

だときだから、すべてが完璧に動作します。

アイデア?

ありがとうございました。

+0

あなたは達成しようとしていることを詳しく教えてください。 – saarthak

+1

@ Calvin、私はRazorと同じ問題があります。どうやら、データの検証はパスワードフィールドに一致しています:* .Passwordは、RegisterUser.PasswordではなくRegisterUserのすべてのインスタンスに一致しています。 –

答えて

5

この

は、クライアント側の検証スクリプトのバグです
element = $(options.form).find(":input[name='" + fullOtherName + "']")[0]; 

名前属性には一重引用符が必要です。

+2

ありがとうございました!あなたの答えは100%正しいです! –

-1

あなたは

<%: 

よりもむしろ

<%= 

を使用しているので、私はヘルパーからの出力は、さらにエスケープを必要とわからないことです。 〜284あなたがこれを見つけるラインで

をjquery.validate.unobtrusive.js:これまで

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; 

変更を:

+0

<%=対<%: – Calvin

+1

を使用した場合の違いはありませんあなたは答えが間違っています! –

関連する問題