Ах, неправильно понял.
Если вы знаете, какие выпадающие списки потенциально могут быть добавлены, я всегда буду иметь значение для вашей модели. MVC установит их как значение по умолчанию, если ничего не получено.
РЕДАКТИРОВАТЬ: вы по-прежнему можете получить доступ к коллекции форм более простым способом без использования контроллеров с помощью
Request.Form.Keys
Request.QueryString.Keys
Request["ExpectedDropdownName"]
Конечно, это будут все значения, опубликованные в вашей форме, поэтому вам понадобится способ распознать одно из ваших выпадающих меню, например префикс или что-то в этом роде. Например
foreach (var key in Request.Form.AllKeys.Where(k => k.StartsWith("dynamic-dropdown-"))
{
var selectedValue = Request[key];
}
Я все еще не совсем понимаю, как вы собираетесь обрабатывать динамические выпадающие списки, если вы не знаете, какими они будут, и это может вызвать некоторые проблемы и сделает проверку полностью динамичной и на стороне клиента (не на 100% безопасной). Это также может представлять некоторые проблемы безопасности, но есть некоторые sceanarios, где вы можете использовать это, и я предполагаю, что у вас есть один из них.
Если это не так, не забывайте, что только из-за того, что у модели есть свойство, ее вообще не нужно публиковать.
Вы можете сделать:
public class MyModel
{
[Required]
public string FirstName { get; set; }
public string PossibleDropdown1 { get; set; }
public string PossibleDropdown2 { get; set; }
}
Контроллер сделает все возможное, чтобы заполнить модель, но если вы не передадите некоторые поля обратно из формы, они просто будут нулевыми, и действие все равно будет работать.
Я также реализовал гораздо более сложные сценарии, подобные этому, используя объекты, которые являются дочерними по отношению к родительской модели и могут иметь все значения NULL. Для этого нужно немного поработать над вызовами ajax для EditorTemplates в фиктивных представлениях, чтобы убедиться, что префикс правильно подходит для анализа MVC, но я не буду вдаваться в подробности.