2016-11-22 3 views
0

Hallo Kann ich eine Funktion in meiner Ansicht rufen Sie die Beschreibung von IDs in der foreachAnruffunktion in Sicht Rasiermesser

Meine Ansicht

@if (Model != null) 
      { 
       int i = 1; 
       foreach (var item in Model) 
       { 
       <tr class=""> 
        <td class="left">@{ new Fullname().getfullname(item.student_id.value).ToString(); }</td> 
        <td class="left"></td> 
        <td class="left">@CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(item.paid_month.Value).ToUpper()</td> 
        <td class="left">@item.monthly</td> 
        <td class="left">@item.transport</td> 
        <td class="left">@item.discount_details</td> 
        <td class="left">@item.total</td> 
       </tr> 
       } 
      } 

in Vollständiger Name Klasse

public class Fullname 
{ 
    private dbEntities db = new dbEntities(); 
    public string getfullname(int? id) 
    { 
     var StudentSelect = db.student.Where(s => s.student_id == id) 
      .Select(s => new 
      { 
       FullName = s.lastname + " " + s.firstname 
      }); 


     return StudentSelect.FirstOrDefault().FullName; 
    } 
} 

I zu erhalten Ich versuche, den Studenten fullname von der @ item.student_id im Modell

, aber nichts angezeigt

danke

+0

Set Haltepunkt auf ‚getFullName‘ Verfahren und prüfen, ob ‚dbEntities‘ zur Datenbank verbinden kann. Auch, wenn Sie es tun möchten, betrachten Sie javascript für Frontend und Server-Seite (C#), nur um Rohdaten zurückzugeben. Razor ist nett, aber überbeanspruchen es wird Projekt unmaintable – nilphilus

+0

sollte grundsätzlich funktionieren (wenn Sie die DB-Verbindung richtig eingerichtet). Ein saubererer und schnellerer Weg wäre, den Elementen eine Eigenschaft für 'FullName' hinzuzufügen und sie aufzufüllen, wenn der Rest der Elementdaten geladen wird, d. H. Im Controller. –

+0

Ich setze einen Haltepunkt auf fullname und es gibt korrekt zurück, aber auf der Ansicht nichts passiert Ich denke, ich vermisse etwas in der Anruffunktion in der Ansicht –

Antwort

2

Das Problem ist, dass Sie den vollständigen Namen korrekt abrufen, aber Sie geben es nie als Zeichenfolge in der gerenderten Ansicht aus.

Über die @variableName Syntax des Werts einer C# Variable als Zeichenfolge emittieren:

@{ var fullname = new Fullname().getfullname(item.student_id.value).ToString(); } 
<td>@fullname</td> 
+0

danke es funktioniert ......... –

0

In MVC findet die Interaktion zwischen Modell zu Ansicht und umgekehrt statt. Um sich dazwischen zu bewegen, benötigen wir ein Ereignis und dann wird es durch Ajax oder durch Senden von Formularen verarbeitet. Hier versuchen Sie, auf eine Klassenfunktion zu verweisen, nachdem Sie von einem Controller zurückgegeben wurden, was bedeutet, dass kein Ereignis ausgelöst wird. Daher wird kein Aufruf an diese Funktion gesendet, und es werden keine Daten zurückgegeben. Aber immer noch, um sicher zu sein, wie Sie einen Bruchpunkt auf Ihrer Funktion setzen können und prüfen, ob das Steuerelement zu ihm kommt oder nicht.

+0

Ich nicht das ist richtig. Das Ereignis, das das Rendering ausgelöst hat, ist in diesem Fall bereits aufgetreten (z. B. eine Get-Anforderung, die die Ansicht rendert). Während Razor die View rendert, sind wir immer noch auf der Serverseite und können prinzipiell Aufrufe in die Datenbank machen. Die '@ {}' Syntax kapselt serverseitigen C# -Code. –

+0

@GeorgPatscheider .... Danke für die Aufklärung mit dieser nützlichen Information. Durch dich und El Hamza etwas Neues gelernt. – Sudhanshu