2013-07-16 40 views
5

Mam problem w How to use javascript variables in C# and vise versa: Mam ten Model przejściu do widoku:Dostęp do zmiennej C# od JavaScript w ASP.NET MVC aplikacji

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

Jest to lista obiektów Tache w którym chciałbym użyj trzech pól: Tache_description, Begin_date i End_date.

W moim kodu JavaScript mam tej funkcji i działa prawidłowo:

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

Wartości tablicy events są tylko do testów, i muszę wypełnić events o wartości Model. Dla każdego elementu takiego jak ten: title = Tache_description, start = Begin_date i end = End_date.

Jak mogę wykonać to zadanie? Jakieś sugestie?

+2

Czy mimo to możesz zwrócić wynik JSON i być może nawiązać połączenie z danymi w ten sposób? –

Odpowiedz

1

Zrób pętlę foreach maszynki ciągu javascript:

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

, ale wskazuje błąd składni w "przecinku" w '@: {title: @ m.Tache_description, start: @ m.Begin_date, end: @ m.Begin_date}' –

+1

Tak, musisz sprawdzić, czy element jest pierwszy, czy nie, jeśli nie jest to najpierw dodaj element przed "{" –

+0

Przepraszam, nie rozumiem jakiej kolejności? –

1

1: jeśli Twój model oczekuje na listę Tache, masz całą listę, którą możesz manipulować.

2: można uzyskać dane za pomocą jquery ajax jako danych json, wywołując swoje działanie Get_List_Tache().

1

Spróbuj tego,

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

Tak więc, w tym kodem po prostu wymienić swoją nazwę podmiotu modelu.

+0

ale model jest listą Tache (opis, początek, koniec) –

-1

Zakładając ten skrypt jest inline na stronie można wykonać następujące czynności:

@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> 

tym przykładzie założono, że model Tache ma właściwości Description, Begin i End:

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

i jeśli to skrypt znajduje się w osobnym pliku javascript, ale możesz nadal ustawić globalną zmienną events w swoim widoku, która później będzie używana przez twój skrypt. Alternatywnie możesz pobrać ten model za pomocą wywołania AJAX.

+0

Mam problem tutaj '(x => nowy {': nie zaakceptował wyrażenia lambda –

+1

Spróbuj umieścić go w tej samej linii. zaktualizowałem moją odpowiedź, a także upewnij się, że użyłeś poprawnych nazw właściwości w twoim modelu Tache w wyrażeniu lambda, a przy okazji, jeśli Visual Studio podkreśli to z czerwonym zawijaniem jako błąd, możesz to zignorować. Visual Studio Intellisense nie jest wystarczająco inteligentny Uruchom aplikację i sprawdź, czy działa. –

+0

ten sam błąd pojawia się: 'CS1977: Nie można użyć wyrażenia lambda jako argumentu do dynamicznie rozpowszechnianego bezpłatnego przez pierwszy rzut, aby przekazać typ lub rodzaj operacji drzewa wyrażeń ' –

1

o tytuł, można zrobić title = „@Tache_description”

nie wiesz o formacie/rodzaju swojej BEGIN_DATE END_DATE, być może trzeba jakąś funkcję, aby przeczytać datę w formacie javascript. Nie powinno być tak trudno.

Przeprowadź pętlę przez każdy element i dodaj elementy do tablicy zdarzeń. To jest coś jak ...

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

dla każdego elementu C# na tej liście C#, napisz te linie javascript. Możesz skończyć z bardzo długim blokiem kodu javascript, ale powinno to wystarczyć. Powyżej jest pseudokod.

Powiązane problemy