Как установить значение выбранного свойства элемента select
Я использую WebMatrix, синтаксис razor и файл cshtml.
У меня есть страница" редактировать"для записи базы данных, которая содержит поле выбора(id="selStatus"). Я пытаюсь установить" выбранное " значение окна выбора динамически, основываясь на значении текущей редактируемой записи.
У меня есть текущее значение или его индекс в локальных var, но я не могу назначить это значение обратно в select.
if (currentStatus=="Completed"){
selStatus.options[1].selected=true;
}
RES = ошибка: имя 'selStatus' не существует в текущем контексте.
я упускаю что-то очевидное здесь, но, похоже, не могу его получить. Любые идеи оценены. Спасибо
4 ответов
кроме использования Javascript вы можете установить выбранный элемент при создании раскрывающегося списка.
это будет работать, когда у вас есть динамически генерируемые меню. Если выпадающий список статичен, вам нужно использовать javascript.
сначала создайте данные, которые заполнят выпадающий список:
var selectQ = "SELECT StatusName, StatusID FROM MyStatusTable";
List<SelectListItem> statusdropdownlistdata = new List<SelectListItem>();
bool isSelected = false;
foreach(var item in db.Query(selectQ)){
isSelected = false;
if(item.StatusName == "Completed"){
isSelected = true;
}
statusdropdownlistdata.Add(new SelectList Item
{
Text = item.StatusName,
Value = item.StatusID.ToString(),
Selected = isSelected
});
}
вышеуказанное создаст данные, которые вы хотите добавить в раскрывающийся список, и выберет элемент, соответствующий критериям. Вам придется изменить, чтобы работать с вашими конкретными критериями и логика.
затем добавьте это в HTML-часть вашего cshtml:
@Html.DropDownList("StatusTypes", statusdropdownlistdata)
выше отобразится раскрывающийся список с идентификатором= "StatusTypes" и вашими раскрывающимися данными с выбранным элементом.
посмотрите Html.DropdownList, и вы, вероятно, сможете найти другие варианты и способы сделать это.
- я не уверен, что этот код будет работать, так как я пишу его по памяти
если у вас есть статический список опций, например, для семейного положения, вы можете сохранить его более разборчивым (для некоторых из нас) следующим образом:
<select>
<option value="Single" @(marStat == "Single" ? "selected" : "")>Single</option>
<option value="Married" @(marStat == "Married" ? "selected" : "")>Married</option>
<option value="Divorced" @(marStat == "Divorced" ? "selected" : "")>Divorced</option>
<option value="Widowed" @(marStat == "Widowed" ? "selected" : "")>Widowed</option>
</select>
это означает, что если переменная razor marStat, содержащая значение, полученное из базы данных, совпадает со строкой в условии, она отображает "выбранный" в HTML. Это немного "грубый" стиль, но я считаю, что это очень читабельно.
в макете сайта:
@{
if (!IsPost)
{
PageData["accountType"] = 0; /* default value */
}
}
<html>
<head></head>
<body>
<form action="@Href("~/")" method="post">
<select name="accountType">
<option value="0"@(PageData["accountType"] == 0 ? " selected" : "")>Standard</option>
<option value="1"@(PageData["accountType"] == 1 ? " selected" : "")>Golden</option>
<option value="2"@(PageData["accountType"] == 2 ? " selected" : "")>Ultimate</option>
</select>
</form>
</body>
<html>
и на другом сайте вы можете получить к нему доступ с чем-то вроде
var accountType = Convert.ToInt32(Request["accountType"]);
позже настроить его для ваших нужд с
PageData["accountType"] = (required int value);
чувствовал себя хорошо, чтобы добавить это, а также-Вот как я это сделал. Вы также можете передать значение в ViewBag от контроллера и захватить его и сделать сравнение в представлении. Увидеть ниже: Здесь в представлении я передаю значение в ViewBag -
ViewBag.degreeLevel = userInfo.educationlevel; (информация о пользователе-это только мой объект)