Как установить значение выбранного свойства выбранного элемента - PullRequest
12 голосов
/ 16 апреля 2011

Я использую webmatrix, синтаксис бритвы и файл cshtml.

У меня есть страница "Изменить" для записи базы данных, которая содержит поле выбора (id = "selStatus"). Я пытаюсь установить «выбранное» значение поля выбора динамически, основываясь на значении текущей редактируемой записи.

У меня есть текущее значение или его индекс в локальных переменных, но я не могу присвоить это значение выбранному.

if (currentStatus=="Completed"){
    selStatus.options[1].selected=true;
}

RES = ошибка: имя selStatus не существует в текущем контексте.

Я упускаю что-то очевидное здесь, но, похоже, не могу этого понять. Любые идеи приветствуются. Спасибо

Ответы [ 4 ]

25 голосов
/ 02 октября 2013

Если у вас есть статический список параметров, например, для Семейного положения, вы можете сделать его более разборчивым (для некоторых из нас), например:

<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>

Что это делает, если вашпеременная бритвы marStat, содержащая значение, которое вы извлекли из базы данных, соответствует строке в условии, она отображает «выбранные» в HTML.Это немного "грубый" стиль, но я считаю, что он очень удобочитаемый.

5 голосов
/ 25 октября 2011

в макете сайта:

@{
    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);
5 голосов
/ 20 апреля 2011

Помимо использования 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)

Выше будет отображаться раскрывающийся список с ID = "StatusTypes" и ваши раскрывающиеся данные с выбранным элементом.

Просмотрите Html.DropdownList, и вы, вероятно, сможете найти другие варианты и способы сделать это.

  • Я не уверен, что этот код будет работать, так как я пишу его по памяти
0 голосов
/ 16 апреля 2017

Хорошо было добавить и это - вот как я это сделал.Вы также можете передать значение в ViewBag из контроллера, захватить его и сделать сравнение в представлении.См. Ниже: Здесь в представлении я передаю значение в ViewBag -

ViewBag.degreeLevel = userInfo.educationlevel; (информация пользователя - это только мой объект)

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

...