如何正确地将页面属性传递给partialview?

时间:2017-08-24 23:06:34

标签: c# razor lambda asp.net-core-2.0 razor-pages

我试图在Razor Pages中使用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 =&gt; 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(&#34; _TeamMember&#34;,new Models.TeamMember()),但这不起作用。

那么为什么它适用于lambda表达式,但如果我使用Model.propertyName则不行?我究竟做错了什么?

1 个答案:

答案 0 :(得分:2)

它可能与他的部分使用页面指令有关吗?有部分指令吗?我还没有自己使用过它。