2013-11-01 3 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 проверки.

после этой проверки на стороне клиента должен быть включен в конфигурации:

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

для проверки на стороне сервера вы можете проверить состояние проверки с:

ModelState.IsValid; 
0

jquery.validate.js/jquery.validate.unobtrusive.js включены в ваш проект? Странно, ваш код выглядит хорошо для меня.

This link may help you...

27

Вот полное решение:

  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- Включить проверку в Интернете.Config:

<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

Вы в основном скопировали ответ Ваагна Наапетяна. – TheWanderingMind

0

Еще один глюк с [Required] использует его в целочисленном поле (а не только при хранении числового значения, но также указывается при сохранении идентификатора выбранного значения в выпадающем списке). Это не будет работать, потому что целочисленное свойство никогда не может быть нулевым и имеет значение по умолчанию, равное нулю, поэтому всегда будет иметь значение.

В этом случае вам необходимо убедиться, что поле объявлено как целое число с нулевым значением, а не просто целое число или Required не будет иметь эффекта. Например.

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

или в качестве альтернативы использовать атрибут Range, чтобы остановить нулевого приемлемое значение:

[Range(1, int.MaxValue)] 
public int? LanguageId { get; set; } 
Смежные вопросы