#asp.net-mvc #vb.net #asp.net-mvc-3 #razor
#asp.net-mvc #vb.net #asp.net-mvc-3 #razor
Вопрос:
MVC 3 VB.NET бритва. У меня есть представление, в котором есть 4 выпадающих списка.. Это для настройки сотрудника.. Если этот сотрудник должен работать с определенными классами, то этот класс будет установлен для каждого дня. Если это не так, значение должно оставаться нулевым. Это вид редактирования, поэтому к нему, возможно, придется обращаться несколько раз и при этом сохранять исходные значения списка выбора, если ничего не изменилось. Ниже приведено то, что у меня есть прямо сейчас, которое работает только на лицевой стороне. Сначала отображается старое выбранное значение. Однако это не возвращается при сохранении… Единственный способ сохранить его правильно — это выбрать значение, которое было установлено в каждом поле, а затем нажать Сохранить. Следующая проблема заключается в том, что не у всех сотрудников будут занятия для работы каждый из 4 дней. Итак, как мне установить значение null и сохранить его таким, если класс фактически не выбран..
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:
если вы посмотрите на источник своей страницы после загрузки страницы, вы увидите, что ваш верхний элемент, установленный в вашем 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.
Комментарии:
1. Хммм, возможно, здесь это не так… Посмотрите вверху на мое редактирование, вы увидите источник страницы просмотра…
2. Это так. Посмотрите на первый вариант в вашем выборе. Значение установлено в «». <значение параметра=»»>T3</option>. Ниже оно снова появляется с правильным значением
3. Я немного изменил свой код, потому что я думаю, что могу передать значение в представление, но оно не выбирает элемент списка выбора…
4. Я снова отредактировал, чтобы показать метод запроса Linq для создания ваших списков выбора, но я не специалист по VB, поэтому я не могу комментировать другой опубликованный вами код. Я просто знаю, как решить проблему в Razor и C #. Я предполагаю, что Linq для VB имеет аналогичный синтаксис, поэтому вы должны быть в состоянии это сделать.