Wyświetlenie danych pobranych z kontrolera w formacie JSON

0

Cześć, nie mam pojęcia co robię źle że nie jestem w stanie wyświetlić w widoku mojej aplikacji pobranych danych. Testuje to na alercie, ale albo wyświetla się object albo nic. Proszę o jakąś podpowiedź.

public JsonResult TakeBookedEvents()
        {
            List<VisitDetails> details = dd.GetAll;

            IEnumerable<VisitDetails> deta = details.AsEnumerable();
            var data = deta.Select(s => new
                {
                    LoginUser = s.LoginUser
                });
            
            return Json(data, JsonRequestBehavior.AllowGet);
        }
 
<script id="jsbin-javascript">

        var test = { url: 'BookVisit/TakeBookedEvents' };
        (...)
 
        var dane = test[0];
        alert(dane.LoginUser)
0

A jakiego typu jest LoginUser?

0

A deserializujesz jakoś tego JSONa po stronie JS?

0

Nic więcej z tym nie robię poza kodem który wstawiłem. Nawet nie mam w opcjach podpowiedzi LoginUser kiedy piszę dane.LoginUser, ale to chyba jest normalne?

Jak mam tak to wyskakuje alert i pisze undefined

var dane = test[0];
alert(dane) 

Natomiast jak mam tak to nawet się alert nie pojawia

 
var dane = test[0];
alert(dane.LoginUser)

A jak zrobię tak to w alercie wyświetla się [object Object]

 alert(test)
0

A w debugerze w przeglądarce jaką wartość ma zmienna dane?

0

Dobra udało się haha. Wygląda to dokładnie tak samo jak w poście powyżej

var dane = test[0]; 

output :undefined

 
var dane = test[0];
var d = dane.LoginUser

output d: undefined

 
var dane = test

output: Object

Mnie to się wydaje że po prostu nie pobieram niczego z kontrolera, że to działa niepoprawnie
var test = { url: 'BookVisit/TakeBookedEvents' };
Nawet jak zmienie ten adres na taki który nie istnieje to mam taki sam output jak w poprawnym..

0

AFAIR zmienne do JSON są serializowane zgodnie z notacją JS czyli zmieniane są na zaczynające się z małej litery, a nie wielkiej. Przynajmniej w Web Api 2 + angular tak to wyglądało. Sprawdź to sobie, mogę się mylić.

Pokaż cały kod JS.

0

Nie ma co chyba pokazywać, pracuję z pluginem fullCalendar i tam potrzebuje te dane do filtrowania. Pousuwałem wszystko co zbędne żeby było lepiej widać. W ten sposób to testuje

<div class="container">
    <div id='calendar' style="width:100%"></div>
</div>

@section scripts{
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<script src="~/Scripts/moment.js"></script>
<script src="~/Scripts/moment-timezone.js"></script>
<link href="~/Content/fullcalendar.css" rel="stylesheet" />
<script src="~/Scripts/fullcalendar.js"></script>

    <script id="jsbin-javascript">

        var test = { url: 'BookVisit/TakeBookedEvents' };


        var eventRender = function (event, element) {
            $(element).html(moment(event.start).format('h:mm'));

                var dane = test[0];
                alert(dane.LoginUser);
                return element;
                
            }
        };


      
        $(document).ready(function () {

            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'agendaWeek,agendaDay'
                },
                defaultView: 'agendaWeek',
                editable: false,
                allDaySlot: false,
                selectable: true,
                events: myEvents,
                eventRender: eventRender,
                eventClick: eventClick,

            });
        });
    </script>
}

Co do wielkości liter to nic się nie zmieniło, ale rzeczywiście chyba trzeba używać małych liter na początku.

2

A w ogóle wywołuje CI akcję kontrolera? Np. zapinałeś sie debuggerem i sprawdzałeś? Albo patrzyłeś w logi? Ja nie wiele rzeczy w JS pisałem, ale nie wydaje mi się, żeby
var test = { url: 'BookVisit/TakeBookedEvents' }; miało Ci te dane pobrać.
Nie chcesz zrobić na przykład tego tak:
http://www.w3schools.com/jquery/ajax_get.asp
?

0

W debuggerze nie zatrzymuje mi się w tej akcji. Czyli lipa. Upieram się tak przy tym zapisie bo już coś podobnego robiłem i udawało mi się pobierać dane w ten sposób, zresztą znalazłem go gdzieś na necie, a teraz nie działa.
Spróbuje zrobić to sposobem z linku.

1

Z tego, co widzę, to Ty nigdzie jawnie nie wysyłasz żądania do serwera, ani nie używasz fullcalendara do tego. To w jaki sposób chcesz otrzymać te dane?
Zapoznaj się z dokumentacją: http://fullcalendar.io/docs/event_data/events_json_feed/

0

No w sumie to racja, myślałem że to mimo wszystko kontaktuje się w jakiś sposób z serwerem :/ To problem rozwiązany..

0

Nie mogę zrozumieć dlaczego jeżeli w myfunction mam alert to eventy pobrane z kontrolera w formacie JSON wyświetlają się w kalendarzu, natomiast jeżeli ten alert usunę w debuggerze w przeglądarce tablica myData ma te dane ale nie jestem w stanie ich wyświetlić w kalendarzu. Wyświetlają się dopiero wtedy jak przesunę tydzień na następny/poprzedni.

$(document).ready(function () {

            $().myfunction();

            $('#calendar').fullCalendar({
              (....)
 $.fn.myfunction = function () {
                $.get("/BookVisit/TakeBookedEvents/", function (data, status) {
                    for (var i = 0; i <= data.length; i++) {
                        myData.push(data[i].loginUser);
                    }
                });
                alert('hej'); 
            };

cały kod

 
@section scripts{
    <link href="~/Content/bootstrap.css" rel="stylesheet" />
    <script src="~/Scripts/moment.js"></script>
    <script src="~/Scripts/moment-timezone.js"></script>
    <link href="~/Content/fullcalendar.css" rel="stylesheet" />
    <script src="~/Scripts/fullcalendar.js"></script>

    <script id="jsbin-javascript">

        var clickedEvents = [];

        var myData = [];

        var myEvents = [];

         $.fn.myfunction = function () {
                $.get("/BookVisit/TakeBookedEvents/", function (data, status) {
                    for (var i = 0; i <= data.length; i++) {
                        myData.push(data[i].loginUser);
                    }
                });
                alert('hej'); 
            };


        var timeCursor = moment(); 
        var endtime = +moment().add(5, 'days');
        while (+timeCursor < endtime) {
            var start = +timeCursor;
            timeCursor = timeCursor.add(15, 'minutes');
            var end = +timeCursor;
            myEvents.push({ start: start, end: end });
        }

        var eventRender = function (event, element) {
            $(element).html(moment(event.start).format('h:mm'));

            if (myData.indexOf(event.start.format()) >= 0)
            {
                $(element).addClass('already-clicked');
                return element;
            }
            else {

                return element;
            }
        };

        $(document).ready(function () {

            $().myfunction();

            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'agendaWeek,agendaDay'
                },
                defaultView: 'agendaWeek',
                editable: false,
                allDaySlot: false,
                selectable: true,
                events: myEvents,
                eventColor: '#33CC33',
                timezone: 'UTC',
                eventRender: eventRender,
            });
        });
    </script>
}
0

Kurcze ma ktoś jakiś pomysł dlaczego w debuggerze w przeglądarce tablica przyjmuje wartości i wszystko działa tak jak ma, natomiast jak uruchamiam bez debuggera to wydawać by się mogło że tablica jest pusta..?

1 użytkowników online, w tym zalogowanych: 0, gości: 1