Рейтинг:
0
David_Wimbley
Вы не получаете выбранное значение, потому что вы не устанавливаете какое-либо выбранное значение. Кроме того, ваш взгляд сбивает с толку, вы зацикливаетесь на выпадающем списке в вашем представлении, вы должны делать это в своей модели или контроллере (предпочтительно модели).... но я не думаю, что это должно показывать 1 тип выпадающего списка на каждого клиента? Во всяком случае...
Для установки выбранного значения списка вы должны сделать что-то подобное.
List<string> dropdown_content = new List<string>();
var query = from m2 in db.custtypes where m2.active == true orderby m2.name select m2.name;
SelectList list = new SelectList(query);
// This is where you find the selected item and if it isn't null, set Selected == true
var selectedItem = list.FirstOrDefault(m=>m.Value == id);
if(selectedItem != null)
{
selectedItem.Selected = true;
}
ViewBag.customertype = list;
Timothy Vandeweerd
Спасибо, Дэвид, я изменилась.:
от: ВАР элемент = список.Метода firstordefault(м =&ГТ; м. Значение == ИД);
к: ВАР элемент = список.FirstOrDefault(m1 =>m1. Value == typeid);
Ошибка выделяет присвоение "= = typeid); "и показывает:" имя 'typeid' не существует в текущем контексте"
Правильно ли я все понимаю? В моем представлении будут перечислены строки из tblcusts (m1), и каждая строка будет иметь выпадающий список, показывающий все строки из tblcusttypes (m2) с набором SelectedValue на основе значения строк tblcusts.typeid, которое может быть различным для каждой строки tblcusts.
David_Wimbley
Является typeid
переменная? В вашем примере кода это строка. Не зная больше о вашем коде, похоже, что вам нужно зациклиться tblcusts
это то, что ваше представление имеет в качестве своей модели, что для цикла в вашем представлении. Пройдите через это в своем классе модели, решите, есть ли там значение, и установите Selected = = true.
SelectList имеет следующие свойства. Текст, Значение, Выделено. Значение - это то, что сохраняется, текст-то, что отображается и выбирается, чтобы указать, было ли что-то выбрано.
Вам нужно будет сделать сравнение, чтобы сказать: "соответствует ли мое значение в списке выбора моему значению из базы данных, если это так- & gt; .Selected имеет значение true".
Timothy Vandeweerd
Дэвид,
Спасибо за ваш ответ. typeid-это столбец int в обеих таблицах. Это первичный ключ в tblcusttypes и внешний ключ в tblcusts. Мое представление будет отображать несколько строк при загрузке страницы, и для каждой строки в tblcusts я хотел бы иметь выпадающий список и значение SeclectedValue, которое будет установлено в значение внешнего ключа. Спасибо за ваше время, я искал и искал и, кажется, не могу найти пример этого в интернете.
Это мой код:
Модели
публичный класс tblcusts
{
[Ключ]
public int custid { get; set; }
public int typeid { get; set; }
}
публичный класс tblcusttypes
{
[Ключ]
public int typeid { get; set; }
public string name { get; set; }
public bool active { get; set; }
}
Смотреть
модель объекта IList&л@; mvcapplication1.модели.tblcusts&ГТ;
@for (var i = 0; i < Model.Граф; ++i)
{
@HTML-код.Dropdownlist для("ИД типа", (интерфейс IEnumerable&ЛТ;selectlistitem&ГТ;)ViewBag.пользовательский)
}
Контроллер
ВАР результат = с M1 в дБ.шлицы выберите М1;
ВАР запрос = с м2 в дБ.custtypes где M2.активный == правда заказатьпо м2.имя выбираете м2.название;
var CustomerType4= новый список & lt;string>();
CustomerType4.AddRange(запрос.Отчетливый());
ViewBag. customertype = новый список выбора (CustomerType4);
David_Wimbley
Эй Тимоти,
Похоже, что в вашем контроллере вам нужно зациклиться на ViewBag.customertype, чтобы установить, что выбрано. Я бы внес следующие изменения.
Вместо
ViewBag.customertype = new SelectList(CustomerType4);
Я бы изменил его на
var selectList = new SelectList(CustomerTyp4);
foreach(var item in selectList)
{
if(item.Value == typeid)
{
item.Selected = true;
}
}
Timothy Vandeweerd
Дэвид, спасибо, но теперь строка ниже выдает ошибку:
если (элемент.Значение == ИД типа)
Ошибка: имя "typeid" не существует в текущем контексте
Я очень ценю ваше время.
David_Wimbley
Никаких проблем, с удовольствием помогу.
Да, проблема в том, что typeId-это ваша переменная. Это то, что вы пытаетесь сказать, является вашим выбранным значением. У меня нет доступа ко всей вашей кодовой базе, а typeId-это то, что вы сказали: "typeid-это столбец int в обеих таблицах. "таким образом, у вас должно быть значение, которое должно быть помечено как выбранное где-то.
В вашем контроллере/действии у вас будет что-то вроде
public ActionResult(int id)
{
var typeId = id;
}
Где идентификатор, переданный в ваше действие, - это запись, которую вы пытаетесь отобразить на экране.
В целях тестирования я предлагаю вам жестко кодировать typeid к любому значению, существующему в вашей базе данных, чтобы вы могли видеть, как работает элемент выбора в SelectList. Оттуда выясните, как вы знаете, какая запись помечена для выбора. В этой части я не могу вам помочь, так как у меня нет доступа к вашему коду и я не знаю, что это за проект.
Надеюсь, это направит вас в правильном направлении
Timothy Vandeweerd
Дэвид, еще раз спасибо. Ниже приведен весь мой код. Идентификатор действия не передается. Когда страница загружается, она показывает список клиентов, и для каждой строки я хотел бы установить SelectedValue для каждого выпадающего списка строк. Источником строк является таблица tblcusts. Источником для каждого выпадающего списка строк является таблица tblcusttypes. Разве это невозможно?
Модели
------
публичный класс tblcusts
{
[Ключ]
public int custid { get; set; }
public int typeid { get; set; }
}
публичный класс tblcusttypes
{
[Ключ]
public int typeid { get; set; }
public string name { get; set; }
public bool active { get; set; }
}
Смотреть
----
Модель объекта IList&л@; mvcapplication1.модели.tblcusts&ГТ;
@for (var i = 0; i < Model.Граф; ++i)
{
@HTML-код.Dropdownlist для("ИД типа", (интерфейс IEnumerable&ЛТ;selectlistitem&ГТ;)ViewBag.пользовательский)
}
Контроллер
----------
ВАР результат = с M1 в дБ.шлицы выберите М1;
ВАР запрос = с м2 в дБ.custtypes где M2.активный == правда заказатьпо м2.имя выбираете м2.название;
var CustomerTypeList = новый список & lt;string>();
CustomerTypeList.AddRange(запрос.Отчетливый());
ViewBag. customertype = новый список выбора(CustomerTypeList);
return View(результат.Список());