Получение идентификатора значения из выпадающего списка

#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, которая содержит фактические списки, которые я использую для заполнения.