Как установить значение выбранного свойства элемента 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; (информация о пользователе-это только мой объект)

затем я делаю сравнения в представлении, как показано ниже: enter image description here