如何正确地将页面属性传递给局部视图?
Posted
技术标签:
【中文标题】如何正确地将页面属性传递给局部视图?【英文标题】:How to properly pass a page property to a partialview? 【发布时间】:2018-02-02 23:01:15 【问题描述】:我正在尝试使用带有 Razor 页面的 PartialViews。我四处搜索并尝试了多种方法,但没有一个解决方案对我有用。
在我的 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)
在 partialView _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 => 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 它就不行?我究竟做错了什么?
【问题讨论】:
【参考方案1】:这可能与您的部分使用页面指令有关吗?是否有针对部分的指令?我自己还没有开始使用。
【讨论】:
难以置信...查看了官方文档,对此一无所知。多么简单,绝对重要,但他们却什么也没说。非常感谢@ddeamaral。以上是关于如何正确地将页面属性传递给局部视图?的主要内容,如果未能解决你的问题,请参考以下文章