#c# #asp.net-mvc
#c# #asp.net-mvc
Вопрос:
Эй, у меня есть три списка с возможностью запроса, которые я объединяю в один список, который будет отображаться в выпадающем списке. Но теперь я хочу получить идентификатор того, что выбрал пользователь, поскольку есть 3 списка на выбор. Спасибо
Пример:
IQueryable<Store> stores= _storeRepository.FindAll().OrderBy(c => c.Description);
var storeList = stores.ToSelectList("StoreId", "Description", viewModel.StoreId.ToString());
IQueryable<Product> products = _productRepository.FindAll().OrderBy(j => j.Name);
var productList = products.ToSelectList("ProductId", "Name", viewModel.ProductId.ToString());
var viewList = storeList.Concat(productList).ToList();
viewModel.Lookups = viewList; //display in dropdown
Комментарии:
1. Есть ли среди всех трех списков уникальный идентификатор?
2. Опубликовать какой-нибудь код? Все элементы списка будут иметь идентификатор. Вы имеете в виду, что вам нужен идентификатор списка IQueryable?
3. Я добавил пример кода, о котором я спрашиваю.
4. Это просто не имеет смысла … не так ли?!
5. Я бы рекомендовал вам настоятельно рассмотреть альтернативы, которые позволяют размещать их в отдельных выпадающих списках.
Ответ №1:
если у вас возник вопрос, у меня есть 3 списка, и пользователь выбирает один, как я могу узнать, какой из них он выбрал
Ответ: вы присваиваете всем трем одинаковое имя, и значение будет меняться в зависимости от того, какое из них выбрал пользователь
если ваш вопрос был в том, что я хочу отправить id
значение с выбранным списком
Ответ :
на сервере нет никакой информации о ваших html-атрибутах
только атрибут name, который соответствует имени параметра метода действия, и значение, которое соответствует значению параметра, вы не можете знать значение id и другие атрибуты на сервере
Пример :
<input type="text" name="Title" id="SomeValue"/>
Сопоставит с :
public ActionResult Index(string Title)
сервер не получит id =»someValue»
Решение :
Что вы можете сделать, так это поместить скрытое поле под каждым элементом с нужным значением
Комментарии:
1. Спасибо за отличный отзыв — но для меня, когда я указываю идентификатор каждого списка, его способ получения — это то, что я больше ищу. Я добавил пример кода из того, что у меня есть, и, возможно, это сузит круг мыслей.
Ответ №2:
вместо этого после объединения сделайте это
viewdata["viewList"] = storeList.Concat(productList).ToList();
и просмотр элементов отображения в выпадающем списке следующим образом
<%= Html.DropDownList("viewlist_id", (List<SelectListItem>)ViewData["viewlist"])%>
теперь используйте кнопку отправки (если хотите опубликовать данные для того же действия, используйте actionlink с routvalues, если перенаправляете на другое действие, я использую здесь кнопку отправки)
<input type="submit" name="submit" value="submit" />
и в вашем действии вы можете получить опубликованные данные
var dropdown_id = Request.Form["viewlist_id"];
таким образом, вы получите идентификатор выбранного выпадающего списка. Спасибо
Комментарии:
1. Большое вам спасибо! Я попробую это сделать и посмотрю, как это сработает, и дам вам знать. Спасибо
2. Итак, я попробовал это, но у меня возникла небольшая проблема. Я формирую свой список в своем файле Controller.cs, и в нем я не могу вставить гиперссылки для отображения — я делаю это на странице view .aspx. Вы случайно не знаете способ решить эту проблему? Миллион благодарностей.
Ответ №3:
Итак, я выяснил, как объединить значения из разных списков в один выпадающий список, при этом я все равно смогу получить доступ к его фактическому значению или идентификатору без объединения — кода много, если кому-то интересно, я продолжу и потрачу время на его правильную публикацию. В остальном, спасибо всем за ваши советы и помощь. Спасибо
Ответ №4:
Итак, вот как я решил свою проблему. В моем файле контроллера — в моем методе Get после нажатия кнопки это то, что я сделал:
resultSummaryViewModel.Value = value;
resultSummaryViewModel.ReportFrame = new FramedViewModel();
if(value !="")
{
string viewValue = value.Substring(0, value.IndexOf("|"));
string viewType = value.Substring(value.IndexOf("|") 1);
resultSummaryViewModel.ReportFrame.SourceURL =
WebPathHelper.MapUrlFromRoot(
string.Format(
"Reporting/ResultSummary.aspx?beginDate={0}amp;endDate={1}amp;Id={2}amp;viewType={3}",
resultSummaryViewModel.BeginDate, resultSummaryViewModel.EndDate, viewValue,
viewType));
}
var viewData = new Dictionary<string, string>();
viewData.Add("Schools", "|allschools");
viewData.Add("Classes", "|allclasses");
Это также связано с моей отображаемой страницей aspx.cs, которая содержит фактические списки, которые я использую для заполнения.