2017-01-10 6 views
-2

En _Layout.cshtml, j'ai cette partie du CodePourquoi ne puis-je pas faire de sous-requête pour une vue partielle pour chaque requête?

<div> 
     @Html.Action("BestStudent", "Student") 
</div> 

Dans Controller Student j'ai créé la méthode BestStudent comme ci-dessous

public class StudentController : Controller 
{ 
    private UniversityInitial dbAllStudents = new UniversityInitial(); 

    [ChildActionOnly] 
    public ActionResult BestStudent() 
    { 
     var best = dbAllStudents.Students 
      .Where(s => s.LastName.StartsWith("M")&s.FirstName.StartsWith("E") & s.City.StartsWith("T")); 
     return PartialView("_BestStudent", best); 
    } 
} 

Vues/dossier partagé J'ai créé la vue partielle du nom _BestStudent.cshtml fortement typé pour le modèle d'étudiant comme ci-dessous:

@model UniversityApp.Models.Student 

<h3 class="text-danger">Student of the year</h3> 
Name : @Model.FirstName 
Last Name : @Model.LastName 
City: @Model.City 

La construction réussissent mais quand je l'exécute j'ai eu un excepti sur comme:

« Erreur d'exécuter la demande de l'enfant pour gestionnaire « System.Web.Mvc.HttpHandlerUtil ...

et le point d'arrêt à la ligne de code ci-dessous:

<div> 
    @Html.Action("BestStudent", "Student") 
</div> 

donc je suppose que quelque chose se passe mal, mais je ne peux pas comprendre ce que

+0

ce sont u font exactement? dites-moi votre scénario – Valkyrie

+0

Parce que votre requête renvoie une collection de 'Student', pas un seul' Student' qui est requis par votre vue (d'où une exception est levée). Changer la requête pour ajouter '.FirstOrDefault()' –

+0

également mis l'erreur complète pas seulement une partie de celui-ci – Valkyrie

Répondre

1

Mise à jour

Fix cette requête comme ci-dessous:

var best = dbAllStudents.Students 
         .Where(s => s.LastName.StartsWith("M")&s.FirstName.StartsWith("E") & s.City.StartsWith("T")).FirstOrDefault(); 
return PartialView("_BestStudent", best); 

Le crédit va à @StephenMuecke