ASP.NET MVC + operacje matematyczne

Odpowiedz Nowy wątek
2020-02-05 08:20

Rejestracja: 2 tygodnie temu

Ostatnio: 3 godziny temu

0

Dzień dobry, mam pewien "problem początkującego" związany z asp.net mvc.
mam model:
amespace Obroty.Models
{
public class Wpis
{
public int WpisId { get; set; }
public DateTime Data { get; set; }
public int IloscSztukDzienna { get; set; }
public int IloscSztukNarastajaco { get; set; }
}
}
Na podstawie tego modelu przy uzyciu Entity wygenerowałem controler crud z widokami.
Chciał przerobić program tak by w widoku dodającym kolejny rekord skasować pole do wprowadzania IloscSztukNarastajaco, tylko żeby wartość tego pola się obliczała przez pobranie wartości IloscSztukNarastajaco z poprzedniego rekordu i dodawało IloscSztukDzienna która jest wprowadzana podczas tworzenia nowego rekordu:) Mam nadzieje że nie zamotałem, generalnie w tabeli ma być wartość z każdego dnia w polu IloscSztukDzienna a w IloscSztukNarastajaco ilość ma narastać przez sumowanie z poprzednim dniem, nie wiem jak osiągnąć taki efekt... Czy może mi ktoś coś podpowiedzieć?

edytowany 1x, ostatnio: Darekm, 2020-02-05 08:20

Pozostało 580 znaków

2020-02-05 08:48

Rejestracja: 1 rok temu

Ostatnio: 1 minuta temu

1

Powinieneś mieć różne view modele. Jeden Create gdzie będzie tylko data i ilość sztuk dzienna. Jeden update gdzie będzie to samo ale jeszcze ID (ten może służyć tez do Delete), oraz view model read gdzie bedzie wszystko. W widokach pokazujesz tylko to co musisz a reszte ukrywasz ale to mało masz do ukrywania bo przez view modele odchudzasz to wszystko. Teraz w kontrolerze przekazujesz z widoku taki view model do modelu. Uwaga - model w MVC nie musi być modelem BD. Dlatego jako model tutaj dałbym coś Ala klasę ObrotyStore, gdzie jest metoda bool AddNewObrot(CreateViewModelObrot), gdzie w środku tworzysz już klasę modelu EF czyli bazodanowego z tego view modelu (nigdy, a przynajmniej jak już zapoznasz się z wzorcem to nigdy ręcznie - refleksje tez odpuść - jest coś takiego jak AutoMapper co zmapuje za Ciebie nawet jak dodasz pola do modelu, Ew dostosuje się mapowanie). No i jak już masz obiekt ObrotyModel z EF to musisz z BD przez EF wybrać obrót ze wczoraj i tam dodać narastający i zapisać. Potem jak zwrócisz sukces to kontroler przekaże do widoku indexobroty czy jakiś tam - tam z ObrotyStore pobierzesz List<obrotyread> I kontroler przekaże to do widoku read gdzie jest jakiś grud pewnie. Ofc pamiętaj o kontroli poprawności - tj czy możesz dodać dwa obroty dziennie etc. To wszystko kontroluj w ObrotyStore i zwracaj jakiś false albo wynik dodawania (można do tego zrobić inna klasę ObrotyCreatResult gdzie będą wyniki jak „dodano”, „Obrót na ten dzień już istnieje” etc). W kontrolerze sprawdzaj poprawność danych czyli czy np ilość jest wypełniona, nie jest ujemna i nie jest np. Napisem (jak dasz kontrolkę umożliwiającą wolne wprowadzanie)

Pozostało 580 znaków

2020-02-05 08:55

Rejestracja: 2 tygodnie temu

Ostatnio: 3 godziny temu

0
somedev napisał(a):

Powinieneś mieć różne view modele. Jeden Create gdzie będzie tylko data i ilość sztuk dzienna. Jeden update gdzie będzie to samo ale jeszcze ID (ten może służyć tez do Delete), oraz view model read gdzie bedzie wszystko. W widokach pokazujesz tylko to co musisz a reszte ukrywasz ale to mało masz do ukrywania bo przez view modele odchudzasz to wszystko. Teraz w kontrolerze przekazujesz z widoku taki view model do modelu. Uwaga - model w MVC nie musi być modelem BD. Dlatego jako model tutaj dałbym coś Ala klasę ObrotyStore, gdzie jest metoda bool AddNewObrot(CreateViewModelObrot), gdzie w środku tworzysz już klasę modelu EF czyli bazodanowego z tego view modelu (nigdy, a przynajmniej jak już zapoznasz się z wzorcem to nigdy ręcznie - refleksje tez odpuść - jest coś takiego jak AutoMapper co zmapuje za Ciebie nawet jak dodasz pola do modelu, Ew dostosuje się mapowanie). No i jak już masz obiekt ObrotyModel z EF to musisz z BD przez EF wybrać obrót ze wczoraj i tam dodać narastający i zapisać. Potem jak zwrócisz sukces to kontroler przekaże do widoku indexobroty czy jakiś tam - tam z ObrotyStore pobierzesz List<obrotyread> I kontroler przekaże to do widoku read gdzie jest jakiś grud pewnie. Ofc pamiętaj o kontroli poprawności - tj czy możesz dodać dwa obroty dziennie etc. To wszystko kontroluj w ObrotyStore i zwracaj jakiś false albo wynik dodawania (można do tego zrobić inna klasę ObrotyCreatResult gdzie będą wyniki jak „dodano”, „Obrót na ten dzień już istnieje” etc). W kontrolerze sprawdzaj poprawność danych czyli czy np ilość jest wypełniona, nie jest ujemna i nie jest np. Napisem (jak dasz kontrolkę umożliwiającą wolne wprowadzanie)

Bardzo dziękuję za odpowiedź, jednak na moim poziomie wiedzy jest dla mnie nie zrozumiała...:/ Czy mógł byś w wolnej chwili stworzyć taki projekt który mógł bym przeanalizować? Inaczej nie ogarnę...

Pozostało 580 znaków

2020-02-05 09:54

Rejestracja: 1 rok temu

Ostatnio: 1 minuta temu

2

Nie chce mi się robić przykładów. Wszystkie moje projekty maja zamknięty kod wiec tez nie pokaże. Masz opisane - wysil się i sam taki stwórz i tutaj wrzuć to popatrzymy i napiszemy czy Ok i co zmienić.

Pozostało 580 znaków

2020-02-10 13:10

Rejestracja: 2 tygodnie temu

Ostatnio: 3 godziny temu

0

Wysil się i spróbuj sam zrozumieć swoją odpowiedź dla początkującego...

Pozostało 580 znaków

2020-02-10 14:10

Rejestracja: 1 rok temu

Ostatnio: 1 minuta temu

1

Ja rozumiem. Ofiarowałem Ci mój czas a Ty tego nie szanujesz. Zadaj konkretne pytania, bo jeśli nic nie rozumiesz to powinieneś piłować podstawy. Einstein w wywiadzie spytany o swoją teorie w „3 słowach” zapytał dziennikarkę o przepis na ciasto dla kogoś kto nie zna pojęć mąka, jajka, drożdże. Usłyszał, że to niemożliwe. Tak samo niemożliwe jest zrozumienie tego co napisałem bez podstaw. Nie zamierzam za darmo pisać przykładów czy przepisywać internetu w inne miejsce internetu bo Tobie nie chce się szukać a wszystkie słowa klucze masz w mojej odpowiedzi wiec siadaj do googli i szukaj, a na pewno zadbaj o dobre fundamenty. Dość zmarnowałem tu czasu, EOT.

Pozostało 580 znaków

2020-02-13 14:21

Rejestracja: 2 tygodnie temu

Ostatnio: 3 godziny temu

0

Nie, Ty zmarnowałeś czas bo nie dostosowałeś poziomu odpowiedzi do poziomu pytającego, tylko wtedy taka pomoc ma jaki kolwiek sens. Jeżeli Ci się nie chciało to było się nie wypowiadać, a nie mieć żal że przecież się tak wysiliłeś a ten głąb tego nie docenił... Napisałem wyżej że to problem początkującego. Co więcej nie zrobiłeś tego dla mnie Tylko dla siebie żeby "przycwaniaczyć" wiedzą, "to tak a to tak, a to inaczej, więcej mi się nie chce, tego mi się nie chce, a to się wysil i se zrób sam"

Podstawy znam, Twój opis był mętny... Na innym forum wyjaśnili w prosty sposób.

Pozostało 580 znaków

2020-02-14 14:36

Rejestracja: 1 rok temu

Ostatnio: 1 minuta temu

0

Czemu po prostu nie wrzucisz kodu?

Pozostało 580 znaków

2020-02-14 15:21

Rejestracja: 1 rok temu

Ostatnio: 9 godzin temu

0

ta sumaSztuk to nie musi byc kolumna, mozesz to zrobic rekurencyjnie. Zacznij od suma=0; suma+ilośćSztuk z ostatniego dnia; ta sama operacja dla poprzedniego dnia, operacje powtarzaj az dodasz do sumy iloscSztuk z wszystkich poprzednich (czyli jesli data obecnego obiektu jest najwczesniejsza datą w tabeli to dodajesz do sumySztuk iloscSztuk ostatni raz i zwracasz z funkcji). Mozesz wyszukiwac obiekty po dacie.

edytowany 1x, ostatnio: lambdadziara, 2020-02-14 15:22

Pozostało 580 znaków

2020-02-14 16:19

Rejestracja: 1 rok temu

Ostatnio: 33 minuty temu

0

Co to było za forum?

Pozostało 580 znaków

Odpowiedz

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