MVC 3 Razor DropdownListДля клиентской части ValidationMessage - PullRequest
0 голосов
/ 25 февраля 2012

После просмотра и выполнения всего рекомендованного как в стеке, так и в онлайн-уроках я не могу заставить свою проверку работать Я правильно настроил? Любое руководство высоко ценится! Я настроил это так:

Редактировать
Int теперь обнуляется за предложения. Но все еще не работает.

Модель

 public class Subscribers

        [Display(Name = "Channel: ")]
        [Required(ErrorMessage = " Channel is required")]
        public int? SelectedChannelID { get; set; }

        public IEnumerable<SelectListItem> ChannelSelectList
                {
                    get
                    {
                        Models.SwitchboardEntities db = new Models.SwitchboardEntities();
                        List<Models.Channel> channelList = db.Channels.ToList();

                        IEnumerable<SelectListItem> selectList =
                            from channel in channelList
                            select new SelectListItem
                            {
                                Text = channel.name,
                                Value = channel.id.ToString()
                            };

                        return selectList;
                    }

                }  

Просмотр

  @model Switchboard.Models.Subscribers  

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

         @Html.LabelFor(xModels => xModels.SelectedChannelID)
         @Html.DropDownListFor(x => x.SelectedChannelID, Model.ChannelSelectList, "--Select Channel--", new Dictionary<string, object> { { "id", "ChannelsDDL" } })
         @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)    

WebConfig

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

Ответы [ 3 ]

1 голос
/ 25 февраля 2012

Я не понимаю, как вы могли бы что-либо проверить.

SelectedChannelID - это int и не может обнуляться.Следовательно, оно всегда имеет выбранное значение .. и, следовательно, Required никогда не сработает.Обязательный будет срабатывать, только если значение равно нулю, что невозможно, если вы используете int.

0 голосов
/ 25 февраля 2012

Убедитесь, что этот раскрывающийся список находится внутри формы. Чтобы проверка на стороне клиента работала, вам нужен контекст формы, иначе Html-помощники не будут выдавать какие-либо атрибуты данных HTML5- *:

@using (Html.BeginForm())
{
    @Html.LabelFor(xModels => xModels.SelectedChannelID)
    @Html.DropDownListFor(
        x => x.SelectedChannelID, 
        Model.ChannelSelectList, 
        "--Select Channel--", 
        new Dictionary<string, object> { { "id", "ChannelsDDL" } }
    )
    @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)    
    <button type="submit">OK</button>
}

и если это не внутри формы (например, этот раскрывающийся список находится внутри частичного, а соответствующая форма находится вне этого частичного), вы можете вручную смоделировать контекст формы, чтобы помощники сгенерировали необходимые атрибуты:

@{
    ViewContext.FormContext = new FormContext();
}

@Html.LabelFor(xModels => xModels.SelectedChannelID)
@Html.DropDownListFor(
    x => x.SelectedChannelID, 
    Model.ChannelSelectList, 
    "--Select Channel--", 
    new Dictionary<string, object> { { "id", "ChannelsDDL" } }
)
@Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)    

Посмотрите на исходный код сгенерированной страницы. Убедитесь, что тег <select> украшен такими атрибутами HTML5 data- *:

<select data-val="true" data-val-number="The field Channel:  must be a number." data-val-required=" Channel is required" id="ChannelsDDL" name="SelectedChannelID">
    ...
</select>

Если атрибуты data- * отсутствуют, проверка на стороне клиента не будет работать.

Проверка на стороне сервера, конечно, будет работать во всех случаях.

0 голосов
/ 25 февраля 2012

Кроме комментариев выше, также убедитесь, что в вашем web.config включена ненавязчивая проверка:

  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...