Не уверен, почему я проголосовал, но я собираюсь переписать свой вопрос после проведения некоторых исследований и тестирования. Это побочный проект, который я использую для изучения MVC/EF/Repository/Bootstrap и т. Д. Я получаю пару часов здесь несколько ночей в неделю, чтобы работать над ним.Должен ли я использовать ViewBag для передачи списка в представление?
Basic оригинальный вопрос:
Я знаю, что я должен действительно быть с помощью списка <> в ViewModel, чтобы передать данные в View, но я не знаю, как или, если он будет соответствовать моим требованиям.
То, что я пытаюсь сделать, - это получить список пользователей для отображения в таблице, которая будет иметь флажок в каждой строке. Над этой таблицей я хочу иметь список групп, к которым они могут быть назначены. Вы выбираете раздел из DropDownList (DDL), а затем проверяете, кому вы хотите его назначить. Это группы/разделы, которые я хочу, хочу назначить в качестве списка и перейти к представлению.
Итак, у меня есть ViewModel со списком, и я использую репозиторий для заполнения виртуальной машины. То, что я не знаю, как это сделать, - это когда/когда заполнять этот список с каждым объектом VM, и даже если я это сделаю, и есть 50 пользователей, я бы не хотел делать 50 поездок в БД, чтобы вытащить ту же информацию . Вот почему я думаю, что для этого сценария с помощью ViewBag передать этот список групп в представление может быть оправданным. С другой стороны, я хотел бы узнать, как правильно заполнить этот список в виртуальной машине для будущей кодировки.
Обновленный вопрос/код:
Таким образом, после дополнительных исследований и следующих несколько предложений, которые я теперь получил следующий код. Я все еще не уверен, как правильно заполню свои патрули в своей модели ViewModel, чтобы заполнить DDL в моем представлении.
На данный момент у меня есть представление, отображающее таблицу с помощью флажков. Теперь я вернусь к тому, чтобы получить значения для заполнения DDL, а затем мне придется работать над публикацией на контроллере, зацикливанием, чтобы найти контрольные строки и обновить базу данных. В моем случае каждый элемент записи по умолчанию имеет значение PatrolId = 0, и эта страница должна позволять мне обновлять PatrolId до значения из DDL.
Свойство Patrols в PatrolMemberViewModel должно быть списком около 5 записей, которые я бы вытащил из таблицы БД вместо жесткого кодирования в DDL.
ViewModel:
public class PatrolViewModel
{
public int PatrolId { get; set; }
public string PatrolName { get; set; }
}
public class PatrolMemberViewModel
{
[Key]
public int MemberId { get; set; }
public int PatrolId { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Display(Name = "Phone")]
public string PhonePrimary { get; set; }
[Display(Name = "Email")]
public string EmailPrimary { get; set; }
public bool IsSelected { get; set; }
public PatrolViewModel Patrols { get; set; }
}
Контроллер:
public ViewResult Unassigned()
{
try
{
IEnumerable<PatrolMemberViewModel> model = repository.SelectAllUnassigned();
return View(model);
}
catch (Exception)
{
ModelState.AddModelError(string.Empty, "Error retrieving the record.");
return View();
}
}
Repository:
public IEnumerable<PatrolMemberViewModel> SelectAllUnassigned()
{
using (DataContext db = new DataContext())
{
var results = (from p in db.Person
where p.IsActive == true
&& p.IsScout == true
&& p.PatrolId == 0
select new PatrolMemberViewModel
{
MemberId = p.PID,
FirstName = p.FirstName ?? string.Empty,
LastName = p.LastName ?? string.Empty,
EmailPrimary = p.EmailPrimary ?? string.Empty,
PhonePrimary = p.PhonePrimary ?? string.Empty,
PatrolId = p.PatrolId,
IsSelected = false
}
).OrderBy(o => o.LastName).ThenBy(o => o.FirstName).ToList();
return results;
}
}
Вид:
@model IList<ProjectName.ViewModels.PatrolMemberViewModel>
@{
ViewBag.Title = "Unassigned";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Patrols</h2>
@using (Html.BeginForm("Update", "Patrol", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false, "", new { @class = "alert alert-danger" })
<table class="table table-bordered table-striped table-hover table-condensed tbackground">
<tr>
<th class="text-center">
</th>
<th class="text-center">
First Name
</th>
<th class="text-center">
Last Name
</th>
<th class="text-center">
Email
</th>
<th class="text-center">
Phone
</th>
</tr>
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td class="text-center">
@Html.CheckBoxFor(m => m[i].IsSelected)
</td>
<td>
@Html.DisplayFor(m => m[i].FirstName)
</td>
<td>
@Html.DisplayFor(m => m[i].LastName)
</td>
<td>
<a href="mailto:@Model[i].EmailPrimary">@Model[i].EmailPrimary</a>
</td>
<td class="text-center">
@Html.DisplayFor(m => m[i].PhonePrimary)
</td>
</tr>
}
</table>
<div class="control-wrapper">
<input type="submit" id="btnSubmit" value="Assign" class="btn btn-success" />
</div>
}
<p> </p>
Выполнение 50 вызовов в db не имеет ничего общего с решениями ViewBag и ViewModel. Речь идет о том, как вы запрашиваете.http: //stackoverflow.com/questions/33921262/is-deferred-execution-in-asp-net-mvc-view-a-very-bad-thing/33921573#33921573 – Shyju
@Shyju ... можете ли вы взглянуть на мое обновление, которое я опубликовал в своем вопросе, и посмотреть, что вы можете сказать, что я делаю неправильно? Спасибо ... – Caverman
Его немного сложно сопоставить ваш _list of users_ и _list из Groups_ с кодом, который вы показали (как это связано с 'MemberSectionViewModel' и' Sections' и 'PatrolViewModel' и' MemberPatrolViewModel')? –