如何正确地将页面 属性 传递给局部视图?

How to properly pass a page property to a partialview?

我正在尝试将 PartialView 与 Razor Pages 结合使用。我四处搜索并尝试了多种方法,但 none 的解决方案对我有用。

在我的 Entries/index.cshtml.cs(代码隐藏)

  public class IndexModel : PageModel
        {
            private readonly CrewLogContext _context;

            public IndexModel(CrewLogContext context)
            {
                _context = context;
            }
            [BindProperty]
            public IList<EntryLog> EntryLog { get;set; }
            public TeamMember TeamMember { get; set; }
     public async Task OnGetAsync(string id)
            {
                TeamMember = await _context.TeamMember.Include(x => x.Position).Include(p => p.Shift).FirstOrDefaultAsync(p => p.Id == id);


                EntryLog = await _context.EntryLog.Where(x => x.TeamMemberId== id)
                    .Include(e => e.Reason)
                    .Include(e => e.ReasonType).ToListAsync();   
            }

所以我正在填充 TeamMember 属性 并且我知道它有值。

在 index.cshtml 我正在尝试对 TeamMember 使用部分视图。

 @Html.Partial("_TeamMember",  Model.TeamMember)

在部分视图上 _TeamMember.cshtml。

 @page
    @model WebCrewLog.Models.TeamMember

    @{
    }
    <h2></h2>
    <div class="panel panel-default">
        <div class="panel-body">

            <div class="row">
                <div class="col-lg-2">
    //Here is where I'm getting an error.
                    <img class="img-circle" src="@Url.Content(Model.PhotoID)" style="width: 80%; height: 80%" />               
                </div>
                <div class="col-lg-5">
                    <p>
                        <label class="text-success">@Html.DisplayFor(model => model.FirstName)  @Html.DisplayFor(model => model.LastName)</label><br />
                        Hired Date:<label class="text-success">@Html.DisplayFor(model => model.HireDate)</label><br />
                    </p>
                </div>
                <div class="col-lge-5">
                    <p>
                        Position:<label class="text-success">@Html.DisplayFor(model => model.Position.Name)</label><br />
                        Shift: <label class="text-success">@Html.DisplayFor(model => model.Shift.Name)</label>
                    </p>
                </div>
            </div>
            <div class="row">
            </div>
        </div>
    </div>

但只有包含 Model.propertyname 时才会出现错误。如果我使用 lambda express 模型 => model.propertyname,它工作得很好。

我尝试根据 PhotoID 字段显示 TeamMember 图像,但我得到

NullReferenceException: Object reference not set to an instance of an object.
    WebCrewLog.Pages._TeamMember_Page+<ExecuteAsync>d__0.MoveNext() in _TeamMember.cshtml
    +
                    <img class="img-circle" src="@Url.Content(Model.PhotoID)" style="width: 80%; height: 80%" />

如果我不使用局部视图而是将 html 放在同一页面中,它就可以正常工作。

我还尝试创建模型的新实例,如 @Html.Partial("_TeamMember", new Models.TeamMember()) 但这没有用。

那么为什么它可以与 lambda 表达式一起使用,而如果我使用 Model.propertyName 它却不能?我究竟做错了什么?

这可能与您的部分使用页面指令有关吗?有部分指令吗?我自己还没开始使用。