Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
1

DropDownList: элемент по умолчанию

09.05.2012, 19:10. Просмотров 7611. Ответов 11
Метки нет (Все метки)

Запарился я с ddl суть вот в чем:
В представлении хочу выводить список dropdownlist`ов и в каждом элемент по умолчанию должен быть задан переменной j.Status
C#
1
2
3
4
5
6
@foreach (var j in ViewBag.order)
{
 @Html.DropDownListFor(j.Status,new SelectList(new[] { "Ожидание", "В пути",  "Доставлен", "Отменен" }
                .Select(x => new { value = x, text = x }),
                "value", "text", ""), j.Status);    
}
Однако эта конструкция не работает =(
Как это можно сделать не изобретая велосипеда?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 19:10
Ответы с готовыми решениями:

Неактивный элемент по-умолчанию в DropDownList
Здравствуйте, есть такая проблема. В DropDownList по умолчанию ставится первый элемент в списке....

Как выбрать элемент DropDownList
Добрый день всем Ребята подскажите как правильно воспользоваться <asp:DropDownList...

Как получить выделенный элемент DropDownList?
Приветствую всех. кусочек кода вьюшки @using (Html.BeginForm("Details", "EditCity")) {...

При открытии страницы показать определенный элемент в DropDownList
Добрый день! столкнулся с проблемой. у меня есть DropDownList, в котором есть юзеры: User: <%=...

Как узнать индекс элемента в DropDownList чтобы удалить элемент из List<T>?
У меня есть список, в текст боксы вбиваю имена и фамилии совершенно рандомные, они выводятся в...

11
Ranvasrog
18 / 18 / 3
Регистрация: 08.11.2010
Сообщений: 78
10.05.2012, 08:00 2
У меня ddl инициализируется одним или двумя параметрами. Первый - это список SelectItem, который я создаю в контроллере, второй - это значение по умолчанию. Зачем у вас дублируется j.Status в 1 и 3 параметре?
0
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
10.05.2012, 09:47  [ТС] 3
Опечатка ) в первом случае там j=>j.Status
Хорошо отправил сие действие в контрол
C#
1
2
3
4
ViewData["Status"] =
                new SelectList(new[] { "В пути", "Ожидание", "Доставлен", "Отменен" }
                .Select(x => new { value = x, text = x }),
                "value", "text", "");
а в представлении
C#
1
@Html.DropDownListFor("Status",j.Status);
но всеровно както не сраслось..
p.s. в j.Status у меня находится текст который должен стоять по умолчанию в дроплисте
0
Renton
42 / 42 / 6
Регистрация: 13.06.2011
Сообщений: 55
10.05.2012, 09:59 4
Контроллер:
C#
1
2
3
4
ViewBag.Status =
                new SelectList(new[] { "В пути", "Ожидание", "Доставлен", "Отменен" }
                .Select(x => new { value = x, text = x }),
                "value", "text");
Представление:
C#
1
@Html.DropDownList("Status", "Текст по умолчанию")
0
10.05.2012, 09:59
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
10.05.2012, 11:54  [ТС] 5
А как сделать что-бы он не добавлял новое поле?
0
Изображения
 
Ranvasrog
18 / 18 / 3
Регистрация: 08.11.2010
Сообщений: 78
10.05.2012, 12:13 6
В представлении, при вызове DropDownList, указывается текст по умолчанию для того случая, если начальное значение будет пустым. Начальное значение указывается при создании SelectList последним параметром. В Вашем случае начальное значение "". Либо в контроллере подгружать начальное значение при создании SelectList, но как я понял вам надо выбранное значение брать в представлении из модели, в таком случае надо разобраться с синтаксисом создания SelectList в представлении.
Напишите потом какой вариант выберете и какая реализация.
0
Renton
42 / 42 / 6
Регистрация: 13.06.2011
Сообщений: 55
10.05.2012, 13:11 7
Контроллер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace MvcApplication1.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            ViewBag.order = new List<Order> { new Order { Status = "Ожидание" },
                                              new Order { Status = "В пути" },
                                              new Order { Status = "Доставлен" },
                                              new Order { Status = "Отменен" },
                                              new Order { Status = "Доставлен" },
                                              new Order { Status = "В пути" },
                                              new Order { Status = "Отменен" },
                                              new Order { Status = "Ожидание" },
                                              new Order { Status = "Отменен" } };
            return View();
        }
 
        public ActionResult About() {
            return View();
        }
 
        public class Order {
            public string Status { get; set; }
        }
    }
}
Представление:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@{
    ViewBag.Title = "Home Page";
    int i = 0;
}
 
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
 
@foreach (var j in (List<MvcApplication1.Controllers.HomeController.Order>)ViewBag.order) {
    @Html.DropDownList("order" + i++, new SelectList(new[] { "Ожидание", "В пути", "Доставлен", "Отменен" }
                .Select(x => new { value = x, text = x }),
                    "value", "text", j.Status))<br />
}
1
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
10.05.2012, 13:42  [ТС] 8
В результате виноват оказался j.Status хотя не могу понять почему...
Если использовать:
C#
1
2
3
4
@Html.DropDownList((string)j.Status, new SelectList(new[] 
{ "Ожидание", "В пути", "Доставлен", "Отменен" }
       .Select(x => new { value = x, text = x }),
       "value", "text", "В пути"))  // тогда в этом случае все поля выберут значение "В пути"
Однако если поставить j.Status ..то почему-то он не хочет брать данные от туда =( Пробовал писать (string)j.Status вместо "В пути" аналогично без результата. Вроде бы элементарно но ступор какой-то.

p.s. Тут возник еще один вопрос по дроплистам... а как получить выбранное пользователем значение? в вебформах был SelectedIndex для этого ...а здесь как?
0
Renton
42 / 42 / 6
Регистрация: 13.06.2011
Сообщений: 55
10.05.2012, 14:26 9
NSvLS, в твоем примере все нормально работает, если вместо "В пути" поставить j.Status. Может ошибся где?
Еще момент. Первый аргумент в методе Html.DropDownList() - это имя (в результирующей html-разметке будет атрибутом name элемента). По этому имени ты можешь получить значение в контроллере. По хорошему, имя должно быть на англ. яз. и уникальным во избежание всяких трабл. Смотри, что получается у тебя в html:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<select name="Ожидание"><option selected="selected" value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="В пути"><option value="Ожидание">Ожидание</option>
<option selected="selected" value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="Доставлен"><option value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option selected="selected" value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="Отменен"><option value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option selected="selected" value="Отменен">Отменен</option>
</select><select name="Доставлен"><option value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option selected="selected" value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="В пути"><option value="Ожидание">Ожидание</option>
<option selected="selected" value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="Отменен"><option value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option selected="selected" value="Отменен">Отменен</option>
</select><select name="Ожидание"><option selected="selected" value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option value="Отменен">Отменен</option>
</select><select name="Отменен"><option value="Ожидание">Ожидание</option>
<option value="В пути">В пути</option>
<option value="Доставлен">Доставлен</option>
<option selected="selected" value="Отменен">Отменен</option>
</select>
По поводу получить выбранное пользователем значение. MVC - это не WebForms. Здесь несколько другой подход. Где ты хочешь получить значение (в контроллере или на клиенте)?
0
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
10.05.2012, 16:00  [ТС] 10
1.И вправду значение невалидное было: <select name="В пути "> пробелы =))
2.Да хоть где-нибудь например в этом же самом примере если я изменю значение в списке, как мне его нужно обрабатывать в представлении?
0
Renton
42 / 42 / 6
Регистрация: 13.06.2011
Сообщений: 55
10.05.2012, 17:48 11
Клиент:
Javascript
1
2
3
4
5
6
7
<script type="text/javascript">
    $(document).ready(function () {
        $("select[name^='order']").change(function () {
            alert("Id: " + this.id + ", Selected Value: " + $(this).val() + ", Selected Text: " + $(this).children("option:selected").text());
        });
    });
</script>
Сервер:
Действие контроллера:
C#
1
2
3
4
[HttpPost]
        public ActionResult Index(string order0, string order3) {
            return new EmptyResult();
        }
Представление:
C#
1
2
3
4
5
6
7
8
@using (Html.BeginForm()) {
foreach (var j in (List<MvcApplication1.Controllers.HomeController.Order>)ViewBag.order) {
    @Html.DropDownList("order" + i++, new SelectList(new[] { "Ожидание", "В пути", "Доставлен", "Отменен" }
                .Select(x => new { value = x, text = x }),
                    "value", "text", j.Status))<br />
}
<input type="submit" value="Send" />
}
1
NSvLS
2 / 2 / 0
Регистрация: 16.06.2011
Сообщений: 40
12.05.2012, 14:39  [ТС] 12
Спасибо за помощь!
p.s.Не сразу заметил 2 страницу
0
12.05.2012, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 14:39

DropDownList имеет SelectedIndex, что недопустимо, так как этот элемент не существует в списке элементов
Перестал работать код, выбрасывает эту ошибку. В pageload этот код: for (int i =...

SelectList выбранный элемент по умолчанию
В контроллере заполняю свойство модели типо SelectList model.Lessons = new SelectList(LessonList,...

Каждый элемент dropdownlist показывает разное слайдшоу
Как создать dropdownlist, где каждый вариант из списка, показывает слайдшоу картинок. Массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru