2017-08-24 1 views
1

J'essaie de faire usage de PartialViews avec des pages de rasoir. J'ai cherché et essayé plusieurs choses mais aucune des solutions n'a fonctionné pour moi.Comment passer correctement une propriété de page à une vue partielle?

Dans mes entrées/index.cshtml.cs (code-behind)

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(); 
      } 

Je suis remplir la propriété d'équipe et je sais qu'il a des valeurs.

sur le fichier index.cshtml J'essaie d'utiliser une vue partielle pour TeamMember.

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

sur le 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> 

Mais j'obtiens une erreur seulement si j'inclue Model.propertyname. si j'utilise lambda express model => model.propertyname, ça marche très bien.

Je suis en train d'afficher l'image d'équipe en fonction du champ PhotoID mais je reçois

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%" /> 

Si je n'utiliser la vue partielle mais je mets le code html dans la même page, il fonctionne très bien.

J'ai également essayé de créer une nouvelle instance du modèle comme @ Html.Partial ("_ TeamMember", new Models.TeamMember()) mais cela n'a pas fonctionné.

Alors, pourquoi cela fonctionne-t-il avec l'expression lambda, mais si je fais Model.propertyName, non? Qu'est-ce que je fais mal?

Répondre

2

Cela peut-il avoir à voir avec le fait que votre partie utilise une directive de page? Y a-t-il une directive pour les partiels? Je n'en ai pas encore utilisé un moi-même.

+2

merci. enlever la page @ l'a fait. – causita

+1

Incroyable ... regardé partout dans les documents officiels, ne pouvait rien voir à ce sujet. Comme c'est simple, absolument crucial et pourtant ils n'en disent rien. Merci beaucoup @ddeamaral. – shadowf

+0

pas de problème! Heureux d'avoir aidé! – ddeamaral