MVC 3 Проверка на стороне клиента - PullRequest
3 голосов
/ 16 июля 2011

Здесь происходит что-то странное.

У меня есть базовая форма:

    <% 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 это:

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; }
}

Проверка правильности сравнения пароля и verifyPassword всегда говорит: «Подтверждение пароля» и «пароль» не совпадают. даже когда я знаю, что они совпадают

Вот странная часть: когда я удаляю первое поле со страницы просмотра, все работает.

Так что, когда это просто

<% 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" />
<% } %>

все работает отлично.

Есть идеи?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 09 января 2012

Это ошибка в клиентском скрипте проверки: jquery.validate.unobtrusive.js

В строке ~ 284 вы найдете это:

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

Измените его:

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

Атрибут name требует одинарных кавычек.

0 голосов
/ 16 июля 2011

Это потому, что вы используете

<%:

Вместо

<%=

Я не уверен, что выход от помощников нуждается в дальнейшем экранировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...