我仍然試圖讓我的頭纏繞使用ViewModels和IEnumerable/List作爲屬性。我顯然錯過了一些讓我在View中看不到IEnumberable的東西。無法在View中看到ViewModel屬性?
我最終試圖做的是顯示一個未分配給用戶組的未分配用戶列表(在這種情況下稱爲Patrols,並且PatrolId = 0)。該表格將在每個成員旁邊有一個複選框。在該表格上方將是可用巡邏的DropDownList。管理員將進入頁面查看未分配的頁面,從頂部的DDL中選擇Patrol,檢查他想分配給該Patrol的用戶,然後提交將從DDL傳遞PatrolID的表單並找到所有選定的成員以便使用該PatrolId更新他們的記錄。
在下面的視圖中,當我去循環Scout屬性時,我會假設我能夠在這部分中使用Model.Scout,以循環並寫出IEnumerable中的所有成員。
@for (var i = 0; i < Model.Count(); i++)
但是,當我嘗試使用智能感知在使用模型時看到Scout屬性時,我看不到該屬性。除此之外,我認爲在寫出所有行之前,我需要首先檢查Scout屬性以查看是否有計數。再次,我看不到Scout屬性以檢查它的數量。
視圖模型
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);
}
庫
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>
謝謝!你和Shyju固定了我,但這個回答對我來說是最接近的答案。 IEnumberable確實有數,但我必須使用IList,因爲我循環訪問模型以分配複選框。一旦我改變了版本庫/界面,它看起來就會起作用。 – Caverman