Для всех выпадающих списков требуется нулевое значение, если значение не изменилось ... Также необходимо, чтобы выбранное значение было значением по умолчанию - PullRequest
1 голос
/ 29 октября 2011

MVC 3 VB.NET бритва. У меня есть представление, в котором есть 4 выпадающих списка. Это для настройки сотрудника. Если этот сотрудник должен работать в определенных классах, то этот класс будет установлен на каждый день. Если он не равен, то значение должно оставаться нулевым. Это представление редактирования, поэтому к нему, возможно, придется обращаться несколько раз и при этом все равно сохранять исходные значения списка выбора, если они не были изменены. Ниже то, что я имею сейчас, которое работает только на его лице. Старое выбранное значение отображается первым. Однако это не возвращается при сохранении ... Единственный способ сохранить его правильно, если я выберу значение, которое было установлено в каждом окне, затем нажму "Сохранить". Следующая проблема заключается в том, что не у всех сотрудников будут занятия по каждому из четырех дней. Итак, как мне установить значение на ноль и сохранить его таким образом, если класс фактически не выбран ..

    Dim _staff As confstaff = db.confstaffs.Single(Function(a) a.id = id)
        ViewBag.role = _staff.Conf_Role.ToString
        ViewBag.confRole = db.conf_roles.ToList
        ViewData("tue_Class") = New SelectList(db.courses.ToList.Where(Function(r) r.course_day = "Tuesday").Select(Function(r) r.course_ref), New With {.value = _staff.tue_class})
        ViewData("wed_Class") = New SelectList(db.courses.ToList.Where(Function(r) r.course_day = "Wednesday").Select(Function(r) r.course_ref), New With {.value = _staff.wed_class})
        ViewData("thur_Class") = New SelectList(db.courses.ToList.Where(Function(r) r.course_day = "Thursday").Select(Function(r) r.course_ref), New With {.value = _staff.thur_class})
        ViewData("fri_Class") = New SelectList(db.courses.ToList.Where(Function(r) r.course_day = "Friday").Select(Function(r) r.course_ref), New With {.value = _staff.fri_class})
        Return View(_staff)

И вид:

     <label>Tuesday Class</label>
       @Html.DropDownList("tue_class", "Select One")
     <label class="small_spacing">Wednesday Class</label>
        @Html.DropDownList("wed_class", "Select One")
     <label class="small_spacing">Thursday Class</label>
        @Html.DropDownList("thur_class", "Select One")
     <label class="small_spacing">Friday Class</label>
        @Html.DropDownList("fri_class", "Select One")

Я уже ожидаю, что кто-то укажет, что я должен использовать модель представления вместо viewbag, но я не понимаю, как модель представления была бы практичной при наличии более 100 различных курсов, но я открыт для идей ...

Любые идеи ???????

1 Ответ

1 голос
/ 29 октября 2011

если вы посмотрите на источник вашей страницы после загрузки страницы, вы увидите, что ваш верхний набор элементов из значения вашей viewbag не имеет значения только для текста, поэтому при отправке он думает, что вы отправляете пустое.Я сталкивался с этим раньше.

Что вам нужно сделать, это вручную создать каждый из выпадающих списков, перебирая коллекцию и устанавливая тот, который соответствует вашему элементу viewbag, выбранным, таким образом, вы можете быть уверены, чтовыбранный элемент имеет выбранное значение.У меня где-то здесь есть код Razr.Обновлюсь, когда найду его.

РЕДАКТИРОВАТЬ

    <select name="Type1" id="Type1">

    <option value=""></option>
     @foreach (var name in ViewBag.BackOfficeTypes)
     {
         if (name == ViewBag.SelectedType1Value)
         {
             <option value="@name" selected="selected">@name</option>
         }
         else
         {
                 <option value="@name">@name</option> 
         }
     }
     </select> 

У меня есть несколько таких на одной странице, построенных из разных наборов предметов.Надеюсь, это поможет.

РЕДАКТИРОВАТЬ 2

Если вы хотите сделать все это из codebehind, я не VB парень, но вот способ сделать это, но вам нужноизменить свой оператор linq, чтобы вручную создавать элементы списка вместо дампа из метода toList.

var courses = db.getCourses();
   IEnumerable<SelectListItem> selectList = 
    from c in courses
    where c.course_day = "Tuesday"
    select new SelectListItem
    {
        Selected = (c.CourseID == selectedCourseID),
        Text = c.Name,
        Value = c.CourseID.ToString()
    };

Если вы можете перевести это в эквивалент VB, это может решить вашу проблему, а не создавать их в конце Razor..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...