Существует два варианта - в зависимости от , где вы хотите выполнить действие, на стороне сервера или на стороне клиента. Я рекомендую использовать сторону сервера, если существует много данных для отправки клиенту для каждого выбора, и сторону клиента, которая не требует делать запрос к серверу, в противном случае.
1) На стороне сервера вы должны публиковать форму каждый раз, когда пользователь выбирает другую опцию из списка. Я показываю, как сделать это через ajax с отправкой HTML с сервера, но вы также можете отправить JSON с сервера и проанализировать его с помощью js. Я использую jquery:
ЯШ:
$('#Estimated_Start_Date').change(function() {
$.post('/.../gethtmlfordropdown', { selection: $('#Estimated_Start_Date').val() }, function(html) {
$('#Choice').html(html);
});
});
cshtml:
<div class="form-group">
@Html.LabelFor(a=> a.pm_main_rep.PM_Event_CategoriesId)
@Html.DropDownListFor(a=>a.pm_main_rep.PM_Event_CategoriesId, new SelectList(Model.pm_evt_catgrss, "Id","type_of_event"), "Select a category", new { @class="form-control"})
</div>
<div id="Choice"><!-- Content from ajax --></div>
Сервер:
public ActionResult GetHtmlForDropDown(string selection)
{
string html = ...; // Get the html depending on 'selection'
return PartialView(html);
}
2) На стороне клиента - присваивайте идентификаторы каждому контенту, будет проще, если идентификатор будет равен значению выбора в раскрывающемся списке или что-то вроде:
cshtml:
<div class="form-group">
@Html.LabelFor(a=> a.pm_main_rep.PM_Event_CategoriesId)
@Html.DropDownListFor(a=>a.pm_main_rep.PM_Event_CategoriesId, new SelectList(Model.pm_evt_catgrss, "Id","type_of_event"), "Select a category", new { @class="form-control"})
</div>
<div class="choice" id="Value1" style="display: none;">...</div>
<div class="choice" id="Value2" style="display: none;">...</div>
<div class="choice" id="Value3" style="display: none;">...</div>
ЯШ:
$('#Estimated_Start_Date').change(function() {
var selection = $('#Estimated_Start_Date').val();
$('.choice').css({ 'display': 'none' })
.filter('#' + selection).css({ 'display': 'block' });
});