html.dropdownlist для привязки выбранного значения к одному столбцу, установки другого столбца для выбранного текста.

Я довольно плохо знаком с mvc и бритвой. У меня есть DropDownListFor, который успешно заполняется списком значений и текста из таблицы данных. Я также успешно связываю выбранное значение со столбцом данных в моей модели данных. Однако база данных, с которой я работаю, не нормализована, и мне нужно извлечь текст из выбранного элемента и связать его с другим полем в моей модели данных. Насколько сложно это сделать?

1 ответ

У вас есть несколько вариантов:

1. Позвоните в базу данных, чтобы получить текст после отправки

public ActionResult Submit(int dropDownListId) 
{
    var text = string.Empty;
    var dataItem = this._dbContext.SomeTableData.SingleOrDefault(m => m.Id == dropDownListId);

    if (dataItem != null) 
    {
        text = dataItem.Title;
    }

    // continue
}

2. Настройте значение раскрывающегося списка и проанализируйте значение в контроллере / бизнес-уровне: если вы используете DropDownListFor HtmlHelper по умолчанию, ваш источник данных имеет тип IEnumerable<SelectListItem> поэтому, пока вы создаете свой класс Model, вы собираетесь передать его представлению, сделайте что-то вроде этого:

//get data from database
var dataSource = this_dbContext.SomeTableData.Select(m => new SelectListItem()
{
    Value = string.Format("{0}|{1}", m.Id, m.Title),
    Text = m.Title
}

И после того, как вы отправите данные, проанализируйте значение:

public ActionResult Submit(string dropDownListValue) {
    string[] values = dropDownListValue.Split('|'); 
    // values[0] = value
    // values[1] = text
}

3. Добавьте скрытое поле в представление и используйте JavaScript для хранения текста

$('#dropDownListId').on('change', function () {
    var text = $(this).find('option:selected').text();
    $('#dropDownListText').val(text); // hidden field
});

и собрать значение после отправки:

public ActionResult Submit(int dropDownListId, string dropDownListText)
{
    //logic
}
Другие вопросы по тегам