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
}