MVC5 + AspNetUsers + Moja tabelka + DTO + API

0

Witam.
Ucze sie MVC5.

Zrobilem sobie tabelke Notes, zeby trzymac w niej notatki. Powiazalem z AspNetUsers, zeby kazdy uzytkownik widzial tylko "swoje" notatki. To dziala dobrze.
Model:
public class Notes
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public string ApplicationUserID { get; set; }
}

Teraz chcialbym zamiast razor widoku, wyswietlic notki uzywajac jquery table.
No i nie dziala.
Przypuszczam (choc moge sie mylic, dopiero zaczynam przygode z MVC) ze problem lezy w tym ze API zwraca zamiast zwyklej tabeli, calkiem skomplikowana strukture.
Aby udowodnic moja teze stworzylem sobie testowy model identyczny jak Notes, ale bez powiazania z ApplicationUser i to mi zwraca prosta tabele, ktora dziala w jquery datatable.

Przyklady zrzutu z API: dzialajaca datatable:

[
    {
        "$id": "1",
        "Id": 1,
        "Title": "Title1",
        "Text": "Text1"
    },
    {
        "$id": "2",
        "Id": 2,
        "Title": "Title2",
        "Text": "Text2"
    },
    {
        "$id": "3",
        "Id": 3,
        "Title": "Title3",
        "Text": "Text3"
    },
    {
        "$id": "4",
        "Id": 4,
        "Title": "Title4",
        "Text": "Text4"
    },
    {
        "$id": "5",
        "Id": 5,
        "Title": "Title5",
        "Text": "Text5"
    },
    {
        "$id": "6",
        "Id": 6,
        "Title": "Title6",
        "Text": "Text6"
    },
    {
        "$id": "7",
        "Id": 7,
        "Title": "Title7",
        "Text": "Text7"
    },
    {
        "$id": "8",
        "Id": 8,
        "Title": "Title8",
        "Text": "Text8"
    },
    {
        "$id": "9",
        "Id": 9,
        "Title": "Title9",
        "Text": "Text9"
    }
]

Przyklady zrzutu z API: niedzialajaca datatable:

[
    {
        "$id": "1",
        "ApplicationUser": {
            "$id": "2",
            "Claims": [],
            "Logins": [],
            "Notes": [
                {
                    "$ref": "1"
                },
                {
                    "$id": "3",
                    "ApplicationUser": {
                        "$ref": "2"
                    },
                    "Id": 27,
                    "Title": "Third",
                    "Text": "ThirdText",
                    "ApplicationUserID": "04cdaf25-f51f-42fc-8819-a3edc89686d6"
                },
                {
                    "$id": "4",
                    "ApplicationUser": {
                        "$ref": "2"
                    },
                    "Id": 28,
                    "Title": "forth",
                    "Text": "forth text",
                    "ApplicationUserID": "04cdaf25-f51f-42fc-8819-a3edc89686d6"
                },
                {
                    "$id": "5",
                    "ApplicationUser": {
                        "$ref": "2"
                    },
                    "Id": 29,
                    "Title": "fifth",
                    "Text": "fifth text",
                    "ApplicationUserID": "04cdaf25-f51f-42fc-8819-a3edc89686d6"
                }
            ],
            "Roles": [],
            "Email": "[email protected]",
            "EmailConfirmed": false,
            "PasswordHash": "AEpJGxoXj+t1ey7GREGCA8vSUZcFmvXRiqCART3W5dlu6gX7ma+rC0dfXIb7iFWJrQ==",
            "SecurityStamp": "b3bedb57-9fad-4595-b3e9-61051fcd9f6d",
            "PhoneNumber": null,
            "PhoneNumberConfirmed": false,
            "TwoFactorEnabled": false,
            "LockoutEndDateUtc": null,
            "LockoutEnabled": true,
            "AccessFailedCount": 0,
            "Id": "04cdaf25-f51f-42fc-8819-a3edc89686d6",
            "UserName": "[email protected]"
        },
        "Id": 26,
        "Title": "Second",
        "Text": "SecondText",
        "ApplicationUserID": "04cdaf25-f51f-42fc-8819-a3edc89686d6"
    },
    {
        "$ref": "3"
    },
    {
        "$ref": "4"
    },
    {
        "$ref": "5"
    }

w tabelce notes mam 4 proste rekordy:
Id Title Text ApplicationUserID
26 Second SecondText 04cdaf25-f51f-42fc-8819-a3edc89686d6
27 Third ThirdText 04cdaf25-f51f-42fc-8819-a3edc89686d6
28 forth forth text 04cdaf25-f51f-42fc-8819-a3edc89686d6
29 fifth fifth text 04cdaf25-f51f-42fc-8819-a3edc89686d6

error:
DataTables warning: table id=notes - Requested unknown parameter 'Title' for row 1, column 0. For more information about this error, please see http://datatables.net/tn/4

Jakis pomysl? Chcialbym uzywac datatable i miec powiazane moje tabelki z uzytkownikami...

Z niecierpliwoscia czekam na konstruktywny komentarz...

0

Ta skomplikowana struktura to JSON.
Musisz zrobić sobie odpowiedni model, który będzie zawierał tylko te dane, które są Ci potrzebne, a nie od razu całą bazę. Nigdy nie zwraca się z api informacji, które są nie potrzebne :) od biedy możesz pobawić się w jQuery i tam przefiltrować wyniki, jednak zalecam fitrowanie wyników w zapytaniu do bazy danych.

BTW. jak zaczynasz się dopiero uczyć MVC 5 to może przejdź od razu do core :>

0
duzy napisał(a):

Ta skomplikowana struktura to JSON.
Musisz zrobić sobie odpowiedni model, który będzie zawierał tylko te dane, które są Ci potrzebne, a nie od razu całą bazę. Nigdy nie zwraca się z api informacji, które są nie potrzebne :) od biedy możesz pobawić się w jQuery i tam przefiltrować wyniki, jednak zalecam fitrowanie wyników w zapytaniu do bazy danych.

BTW. jak zaczynasz się dopiero uczyć MVC 5 to może przejdź od razu do core :>

Faktycznie, poprawny model to:
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public string ApplicationUserID { get; set; }

ApplicationUserID wypelniam podczas zapisywania rekordu, a jak ktos kiedys bedzie mial problemy z jquery datatable to jest swietne narzedzie do debugowania:
https://debug.datatables.net
Dziekuje za odpowiedz postaram sie zamknac watek.

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