2013-07-16 13 views
5

Ich habe ein Problem in How to use javascript variables in C# and vise versa: Ich habe diese Model zur Ansicht vorbei:Zugriff auf C# Variable von JavaScript in asp.net MVC-Anwendung

public List<Tache> Get_List_Tache() 
{ 
    Equipe _equipe = new Equipe(); 
    List<Tache> liste_initiale = _equipe.Get_List_tache(); 
    return liste_initiale; 
} 

Es ist eine Liste von Objekten Tache in denen Ich mag würde zu Verwenden Sie die drei Felder Tache_description, Begin_date und End_date.

In meinem JavaScript-Code habe ich diese Funktion und es funktioniert gut:

 <script> 

     $(document).ready(function() { 
      var date = new Date(); 
      var d = date.getDate(); 
      var m = date.getMonth(); 
      var y = date.getFullYear(); 

      $('#calendar').fullCalendar({ 
       theme: true, 
       header: {left: 'prev,next today',center: 'title',right: 'month,agendaWeek,agendaDay'}, 
       editable: true, 
       events: [ 
         @foreach (var m in Model.Get_List_Tache()) 
          { 
         @:{title : @m.Tache_description , start: @m.Begin_date , end : @m.Begin_date } 
          } 
         ] 

       }); 
             }); 

</script> 

Die Werte des Arrays events sind nur für Test, und ich brauche events durch den Wert der Model zu füllen. Für jedes Element wie dieses: title = Tache_description, start = Begin_date und end = End_date.

Also, wie kann ich diese Aufgabe tun? Irgendwelche Vorschläge?

+2

Könnten Sie trotzdem ein JSON-Ergebnis zurückgeben und vielleicht so auf die Daten zugreifen? –

Antwort

1

eine foreach Rasierer Schleife innerhalb Javascript Hersteller:

var date = new Date(); 
var d = date.getDate(); 
var m = date.getMonth(); 
var y = date.getFullYear(); 
$('#calendar').fullCalendar({ 
    theme: true, 
    header: {left: 'prev,next today',center: 'title',right: 'month,agendaWeek,agendaDay'}, 
    editable: true, 
    events: [ 
    @ 
    { 
     bool isFirst = true; 
    } 
    @foreach(var m in Model) 
    { 
     if(!isFirst) 
     { 
      @:, 
     } 

     @:{title: @m.Tache_description, ...<other properties here>} 

     isFirst = false; 
    } 
    ] 
}); 
+0

, aber es zeigt einen Syntaxfehler im 'Komma' an in '@: {title: @ m.Tache_description, start: @ m.Beginn_datum, end: @ m.Beginn_datum}' –

+1

Ja, du musst prüfen, ob das Element das erste ist oder nicht, wenn es nicht vorher ein Komma hinzufügen soll "{" –

+0

Entschuldigung ich verstehe nicht, welche Reihenfolge? –

1

1: Wenn Ihr Modell die Liste der Tache erwartet, dann haben Sie die ganze Liste, die Sie manipulieren können.

2: Sie können die Daten mit JQuery AJAX als JSON-Daten abrufen, indem Sie Ihre Aktion Get_List_Tache() aufrufen.

1

die Sie interessieren,

foreach (var item in YourList) 
{ 
    events: [{ title: '@item.title', start: '@item.start', end: '@item.end'}] 
} 

in diesem Code So ersetzen Sie einfach Ihr Modell Entitätsname.

+0

aber das Modell ist eine Liste von Tache (Beschreibung, Anfang, Ende) –

-1

dieses Javascript Unter der Annahme, in Ihrer Seite inline könnten Sie wie folgt vorgehen:

@model IList<Tache> 
<script type="text/javascript"> 
    var events = @Html.Raw(Json.Encode(Model.Select(x => new { title = x.Description, start = x.Begin.ToString("o"), end = x.End.ToString("o") }))); 

    $('#calendar').fullCalendar({ 
     theme: true, 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     events: events 
    }); 
</script> 

Dieses Beispiel geht davon aus, dass Ihre Tache Modell-Eigenschaften hat Description, Begin und End:

public class Tache 
{ 
    public string Description { get; set; } 
    public DateTime Begin { get; set; } 
    public DateTime End { get; set; } 
} 

Und wenn dies Das Skript befindet sich in einer separaten JavaScript-Datei. Sie könnten dennoch eine globale events Variable in Ihrer Ansicht festlegen, die später von Ihrem Skript verwendet wird. Alternativ könnten Sie dieses Modell mit einem AJAX-Aufruf abrufen.

+0

Ich habe hier ein Problem '(x => neu {': es akzeptiert den Lambda-Ausdruck nicht –

+1

Versuchen Sie es in die gleiche Zeile. Ich habe Ich habe meine Antwort aktualisiert und vergewissere mich, dass Sie im Lambda-Ausdruck die richtigen Eigenschaftsnamen in Ihrem Tache-Modell verwendet haben und Visual Studio Intellisense nicht intelligent genug ist, wenn Visual Studio dies mit einem roten Squiggle als Fehler unterstreicht Führen Sie Ihre Anwendung und sehen, ob es funktioniert –

+0

das gleiche erscheint dieser Fehler: 'CS1977: Kann nicht einen Lambda-Ausdruck als ein Argument für eine dynamisch verteilt frei von ersten Cast zu Delegate Typ oder Art der Ausdrucksbaumoperation verwenden –

1

Für Titel, können Sie title = „@Tache_description“

Nicht sicher über das Format/Typ Ihres BEGIN_DATE und end_date tun, können Sie eine Funktion benötigen Sie das Datum in ein Javascript-Format zu lesen. Sollte nicht so schwer sein.

Schleife durch jedes Element und füge die Elemente zum Ereignisarray hinzu. Es ist etwas wie ...

events = new Array() 
@foreach(tache in list){ 
    item = { blah : blah, blah : blah }; 
    events.push(item); 
} 

für jedes C# Element in dieser C# -Liste, schreiben Sie diese Zeilen von Javascript. Sie können mit einem sehr langen JavaScript-Code-Block enden, aber es sollte den Trick tun. Oben ist Pseudocode.

Verwandte Themen