Я все еще пытаюсь обернуть свою голову, используя ViewModels и IEnumerable/List as properties. Мне явно не хватает чего-то, что не позволяет мне увидеть мой IEnumberable в моем представлении.Невозможно увидеть свойство ViewModel в представлении?
То, что я в конечном счете пытаюсь сделать, - это показать, что будет отображаться список неназначенных пользователей, не назначенных группе (в данном случае это называется Patrols и будет иметь PatrolId = 0). В таблице будет установлен флажок рядом с каждым членом. Над этой таблицей будет DropDownList доступных патрулей. Администратор придет на страницу, чтобы увидеть те, которые не назначены, выберите Патруль из DDL наверху, проверьте пользователей, которых он хочет назначить этому Патрулю, и затем отправьте форму, которая передаст PatrolID из DDL и найдите всех выбранных членов, чтобы обновить их запись с помощью PatrolId.
В представлении ниже, когда я перехожу через свойство Scout, я бы предположил, что смогу использовать Model.Scout в этой части, чтобы пропустить и выписать все элементы в этом IEnumerable.
@for (var i = 0; i < Model.Count(); i++)
Однако, когда я пытаюсь использовать IntelliSense, чтобы увидеть свойство Scout при использовании модели, я не вижу свойство. В дополнение к этому, я думаю, мне нужно будет сначала проверить свойство Scout, чтобы увидеть, есть ли счет, прежде чем я выпишу все строки. Опять же, я не вижу свойства Scout, чтобы проверить его количество.
ViewModel
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 class PatrolUnassignedViewModel
{
public SelectList Patrols { get; set; }
public IEnumerable<PatrolMemberViewModel> Scout { get; set; }
}
Контроллер
// GET:
public ViewResult Unassigned()
{
PatrolUnassignedViewModel unassinged = new PatrolUnassignedViewModel();
unassinged.Patrols = new SelectList(repository.SelectAllPatrols());
unassinged.Scout = repository.SelectAllUnassigned();
return View(unassinged);
}
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;
}
}
public IEnumerable<PatrolName> SelectAllPatrols()
{
return db.PatrolNames;
}
Посмотреть
@model IList<ProjectName.ViewModels.PatrolUnassignedViewModel>
@{
ViewBag.Title = "Unassigned";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Patrols</h2>
<h4>Assign Scouts to a Patrol.</h4>
@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 Scouts" class="btn btn-success" />
</div>
}
<p> </p>
Спасибо! Ты и Шыю меня подкрепили, но этот ответ был самым близким для меня ответом. IEnumberable имеет счет, но я должен был использовать IList из-за того, как я прокручиваю модель, чтобы назначить флажки. Как только я изменил репозиторий/интерфейс, похоже, что он будет работать. – Caverman