Без использования картографа или изменения привязки свойств модели, самый простой способ сделать это - создать класс для ваших SearchValues.
- Создать класс SearchValue
public class SearchValue{
public int Id {get;set;}
public string value {get;set;}
}
Используйте это как список в вашей модели
public string FreeText { get; set; }
// replace dictionary
public List<SearchValue> SearchValues { get; set; }
public List<DropDownModel> DropDowns { get; set; }
Тогда используйте вид ниже
@using (Html.BeginForm("GetSearchResults", "Home", FormMethod.Post))
{
@Html.TextBoxFor(m => m.FreeText, new { @class = "form-control mb-3", @placeholder = "Search..." })
@{
int counter = 0;
}
foreach (var dropDown in Model.DropDowns)
{
<input type="hidden" name="SearchValues[@counter].Id" value="@dropdown.DataFieldId">
@Html.DropDownListFor(m => m.SearchValues[counter].Value, dropDown.ListItems, dropDown.OptionLabel, new { @class = "form-control mb-3" });
@counter++;
}
<button type="submit" class="btn btn-primary btn-block">Search</button>
}