0

В моем решении я использую listbox для отображения списка, например, & Также я использую Chosen.js, чтобы выбрать несколько записей.Подтвердить список, используя аннотации

@Html.ListBox("AllLanguages", new SelectList(ViewBag.Languages, "Id", "Language1")) 


<div id="languagesDiv"></div> 

с помощью JQuery Я привык это скрытые поля для моей модели связанного приложения собственности как сильфон

$(document).ready(function() { 
     $("#AllLanguages").chosen(); 

     $("#AllLanguages").on("change", function() { 
      $("#languagesDiv").empty(); 
      var languagesCount = 0; 
      $("#AllLanguages option:selected").each(function() { 
       var lang = "<input type='hidden' id='MovieLanguages[" + languagesCount + "].LanguageId' name='MovieLanguages[" + languagesCount + "].LanguageId' value='" + $(this).val() + "' />"; 

       $("#languagesDiv").append(lang); 
       languagesCount++; 
      }); 
     }); 
    }); 

Что это Jquery будет делать это, он будет создавать скрытые поля для каждого из выбранных значений, как ниже

<input type='hidden' id='MovieLanguages[0].LanguageId' name='MovieLanguages[0].LanguageId' value='1' /> 
    <input type='hidden' id='MovieLanguages[1].LanguageId' name='MovieLanguages[1].LanguageId' value='2' /> 

Теперь я хочу убедиться, что пользователь должен выбрать по крайней мере одно значение из списка.

Моя модель свойство для этого списка

 public IList<Language> MovieLanguages { get; set; } 

Я попытался с помощью @Html.ValidationMessageFor(x => x.MovieLanguages), но это не работает.

Как это подтвердить? Если есть лучший способ сделать это, то, пожалуйста, дайте мне знать

+0

Нет атрибута проверки, который соответствует вашим потребностям. Вы всегда можете подсчитать выбранные параметры и, если нуль, предотвратить отправку и отобразить сообщение об ошибке. Но почему вы создаете скрытые входы? - Свойство 'AllLanguages' содержит значения выбранных параметров при отправке формы –

+0

@StephenMuecke, как я могу привязать выбранные значения к свойству Model напрямую? обновленный вопрос с помощью свойства модели –

+0

Для просмотра модели требуется свойство 'IEnumerable SelectedLanguages', а затем его' @ Html.ListBoxFor (m => m.SelectedLanguages, новый SelectList (ViewBag.Languages, "Id", "Language1")) ' и когда вы отправляете, значение 'SelectedLanguages' будет содержать все выбранные идентификаторы (хотя я рекомендую, чтобы ваша модель представления содержала свойство' SelectList Languages', а не использование 'ViewBag') –

ответ

0

Элемент выбора HTML может возвращать только простые типы: int, string и т. Д. Вы не можете публиковать полный объект Language из выбранного ввода. Таким образом, вам нужно свойство, которое вы можете связывать, который будет принимать список языковых идентификаторов:

public List<int> SelectedLanguageIds { get; set; } 

Тогда, на ваш взгляд:

@Html.ListBoxFor(m => m.SelectedLanguageIds, new SelectList(ViewBag.Languages, "Id", "Language1")) 

В вашем почтовом действии, то вы можете использовать этот список для поиска связанных с ними объектов Language:

var selectedLanguages = db.Languages.Where(m => model.SelectedLanguageIds.Contains(m.Id)); 

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

+0

Я сделал то же самое. Но некоторые из них не применяются для проверки «SelectedLanguageIds». Я добавил атрибут [[Обязательный]] в моей модели просмотра для этого свойства. Это связано с тем, что я использую selected.js. –