Как добавить пользовательские атрибуты в выпадающий список asp. net - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь добавить название страны в качестве атрибута страны к элементу управления asp. net, но мне не повезло с этим.

ListItem newState;
foreach (DataRow drow in dsDist.Tables(1).Rows)
{
    newState = new ListItem(drow("statename").ToString(), drow("state").ToString());
    newState.Attributes.Add("country", drow("country-name").ToString());
    ddlstates.Items.Add(newState);
}

ddlstates.Items.Insert(0, new ListItem("", ""));
ddlstates.SelectedIndex = 0;

После рендеринга страницы;

<select name="ddlStates" id="ddlStates" class="chosen-select-states" data-placeholder="search by state name" style="display: none;">
        <option selected="selected" value=""></option>
        <option value="AK">Alaska</option>
        <option value="AL">Alabama</option>
        <option value="AR">Arkansas</option>
        <option value="AZ">Arizona</option>
</select>

Это то, что я ожидаю;

<option country="usa" value="AK">Alaska</option>
<option country="canada" value="ON">Ontario</option>

1 Ответ

0 голосов
/ 08 апреля 2020

Ваши атрибуты должны отображаться на отображаемой странице с помощью инструментов разработчика вашего браузера. Но атрибуты не будут отправлены обратно, и вы не сможете вернуть их, например, на событие SelectedIndexChanged.

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

В зависимости от того, что вы хотите сделать, вы, возможно, можете сохранить Dictionary<String,String> itemAttributes, содержащий значения ListItems и Атрибуты.

Это может быть что-то вроде:

Dictionary<string, string> itemAttributes = new Dictionary<string, string>();
            ListItem newState;

            foreach (DataRow drow in dsDist.Tables(1).Rows)
            {
                newState = new ListItem(drow("statename").ToString(), drow("state").ToString());
                //newState.Attributes.Add("country", drow("country-name").ToString());

                ddlstates.Items.Add(newState);
                itemAttributes.Add(drow("state"), drow("country-name"));
            }

            ddlstates.Items.Insert(0, new ListItem("", ""));
            ddlstates.SelectedIndex = 0;

            Session["Attributes"] = itemAttributes;
            ViewState["Attributes"] = itemAttributes;

Остерегайтесь размера сеанса или состояния просмотра, если вы используете этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...