簡體   English   中英

無法在View中看到ViewModel屬性?

[英]Not able to see ViewModel property in View?

我仍在嘗試使用ViewModels和IEnumerable / List作為屬性來解決問題。 我顯然丟失了某些東西,使我無法在視圖中看到IEnumberable。

我最終想要做的是擁有一個視圖,該視圖將顯示未分配給組的未分配用戶的列表(在這種情況下稱為Patrols,並且PatrolId = 0)。 該表在每個成員旁邊都有一個復選框。 在該表上方是可用巡邏的DropDownList。 管理員將來到該頁面查看未分配的用戶,從頂部的DDL中選擇一個巡邏,檢查他想要分配給該巡邏的用戶,然后提交將通過DDL傳遞PatrolID的表格並找到所有選定的成員,以便使用該PatrolId更新他們的記錄。

在下面的視圖中,當我遍歷Scout屬性時,我假設我可以在此部分中使用Model.Scout以便遍歷並寫出該IEnumerable中的所有成員。

@for (var i = 0; i < Model.Count(); i++)

但是,當我嘗試在使用Model時使用智能感知來查看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>&nbsp;</p>

您的控制器返回的是PatrolUnassignedViewModel類的單個實例

    public ViewResult Unassigned()
    {
        PatrolUnassignedViewModel unassinged = new PatrolUnassignedViewModel();
        unassinged.Patrols = new SelectList(repository.SelectAllPatrols());
        unassinged.Scout = repository.SelectAllUnassigned();
        return View(unassinged);
    }

您的視圖期待一個IList

@model IList<ProjectName.ViewModels.PatrolUnassignedViewModel>

什么時候應該期待

@model ProjectName.ViewModels.PatrolUnassignedViewModel

您的偵查員是IEnumerable,因此沒有count方法,因此應

public IList<PatrolMemberViewModel> Scout { get; set; }
public IList<PatrolMemberViewModel> SelectAllUnassigned()
{
}

你應該像這樣做你的循環

    @for (var i = 0; i < Model.Scout.Count(); i++)
    {
    <tr>
        <td class="text-center">
            @Html.CheckBoxFor(m => m.Scout[i].IsSelected)
        </td>
        <td>
            @Html.DisplayFor(m => m.Scout[i].FirstName)
        </td>
        <td>
            @Html.DisplayFor(m => m.Scout[i].LastName)
        </td>
        <td>
            <a href="mailto:@Model.Scout[i].EmailPrimary">@Model.Scout[i].EmailPrimary</a>
        </td>
        <td class="text-center">
            @Html.DisplayFor(m => m.Scout[i].PhonePrimary)
        </td>
    </tr>
    }

我在這里想念什么嗎?

從GET操作方法中,您傳遞了PatrolUnassignedViewModel的單個對象。 但是您的視圖綁定到PatrolUnassignedViewModel的集合。 所以改變你的看法像

@model PatrolUnassignedViewModel

現在,您可以使用Model.Scout屬性,它是一個集合。

@model PatrolUnassignedViewModel
<h2>Total : @Model.Scout.Count()</h2>
@foreach(var item in Model.Scout)
{
   <label>@item.FirstName</label>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM