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

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。

以上是关于如何正确地将页面属性传递给局部视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将单击按钮属性值传递给表单提交事件?

将额外的 ViewData 传递给强类型的局部视图

使用 JQuery 重新加载局部视图

Jsp 视图页面在 Spring Boot 中不呈现。如何解决?

RN 如何给页面传参数

如何正确地将文本文件传递给 NSFileManager