• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

dwa modele w jednym widoku C#

VPS Starter Arubacloud
0 głosów
641 wizyt
pytanie zadane 9 stycznia 2018 w C# przez lewy Obywatel (1,260 p.)

Witam mam problem z dodaniem jeszcze jednego widoku z kategoriami na stronie głownej kod przedstawia sie tak :

@model PagedList.IPagedList<ForumIT.ViewModels.Lista>
@using ForumIT;
@using PagedList.Mvc;
@{
    ViewBag.Title = "Materiały";
}

<div class="jumbotron">
    <h1>Forum Dyskusyjne IT</h1><br />
    <p class="lead">Forum poświęcone jest szeroko rozwiniętej dziedzinie informatyki. Przedstaw swój problem w temacie i przedyskutuj go z dużym gronem użytkowników służących pomocą</p>
</div><br /><br />
<div class="row">


    <div class="col-md-8">
        <div class="panel panel-default">
            <div class="panel-heading"><h3>Tematy</h3></div>
        </div>
        <div class=" panel panel-default" style="padding: 10px">



            <hr />
            @foreach (var item in Model)
            {

                <div class="media">

                    <div class="media-left" style="padding-right: 30px">
                        <img class="media-object img-circle"
                             src="~/Graphics/Users/@((item.Foto!=null)?@item.Foto:"user.png")"
                             alt="zdjęcie"
                             width="64">
                        <h6><b>@item.Autor</b></h6>
                    </div>
                    <div class="media-body">

                        <h4 class="media-heading">
                            <a title="Czytaj" href="@Url.Action("Details", "Temat", new { id = item.IdTematu })">
                                <h1 style="margin-top: 0px">@item.Tytul</h1>
                            </a>
                        </h4>
                        <p style="max-width: 600px; max-height: 95px">@item.Tresc</p>

                    </div>
                </div>
                <hr />


            }
        </div>
        <div class="row">
            Strona @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) z @Model.PageCount
            <div class="pull-right">
                @Html.PagedListPager(Model, Page => Url.Action("Index", new { strona = Page }))
            </div>
        </div>
    </div>
        <div class="col-md-4">
            <div class="list-group">
                <div class="panel panel-default">
                    <div class="panel-heading"><h3>Kategorie</h3></div>
                </div>

                <a href="~/Home/index">
                    <button type="button" class="list-group-item">Wszystkie Kategorie</button>
                </a>

                @foreach (var item in Model)
                {
                    <a href="~/Home/index/2">
                        <button type="button" class="list-group-item">@item.NazwaKategorii</button>
                </a>
                }
            </div>

        </div>
</div>

using ForumIT.Models;
using ForumIT.ViewModels;
using PagedList;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ForumIT.Controllers
{
    public class HomeController : Controller
    {
        private ForumContext db = new ForumContext();

        public ActionResult Index(int? id = 0, int? rozmiar = 5, int? strona = 1)
        {
            IQueryable<Lista> lista = from t in db.Tematy
                                      orderby t.DataDodania descending
                                      select new Lista()
                                      {
                                          IdTematu = t.IdTematu,
                                          Tytul = t.Tytul,
                                          Tresc = t.Tresc,
                                          Autor = t.Uzytkownik.Imie + " " + t.Uzytkownik.Nazwisko,
                                          Foto = t.Uzytkownik.Foto,
                                          IdKategorii = t.IdKategorii
                                      };
            IQueryable<Lista> lista2 = from k in db.Kategorie
                                       select new Lista()
                                       {
                                           NazwaKategorii = k.NazwaKategorii,
                                           Ikona = k.Ikona,
                                           IdKategoriiK = k.IdKategorii
                                       };
            if (id != 0)
            {
                lista = lista.Where(l => l.IdKategorii == id);
            }
            return View(lista.ToPagedList((int)strona, (int)rozmiar));
            
        }
namespace ForumIT.ViewModels
{
    public class Lista
    {
        public int IdTematu { get; set; }
        public string Tytul { get; set; }
        public string Tresc { get; set; }
        public string Autor { get; set; }
        public string Foto { get; set; }
        public int IdKategorii { get; set; }
    
        public string NazwaKategorii { get; set; }
        public string Ikona { get; set; }
        public int IdKategoriiK { get; set; }
    }
}

jest tutaj utrudnienie bo wykorzystuje pagedList  i nie wiem jak dodac jeszcze model z encja Kategorie zeby je wyswietlic prosze was o pomoc .

2 odpowiedzi

0 głosów
odpowiedź 11 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
wybrane 14 stycznia 2018 przez lewy
 
Najlepsza
Oczywiście że możesz ;)

-Jedna opcja to Tuple(oczywiście kiepska, doczytaj dlaczego nie zaleca się jej używać)

-Zwróć Model w którym masz 2 różne klasy, w twoim wypadku to będzie model, odwołujesz się do obiektu zwyczajnie przez kropkę

 

public class JakiśModel

{

public TwójPierwszyModel model {get;set;}

public TwójDrugiModel dwa {get;set;}

}
komentarz 11 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
I oczywiście zwróć obiekt klasy JakiśModel
0 głosów
odpowiedź 10 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)
Czy ja dobrze widzę że podajesz model dla widoku? Że coo?, Powinieneś podać po prostu dane do widoku, podaniem ich w odpowiedniej postaci ma się zająć kontroler (chyba że z MVVM korzystasz, ale w web Developmencie raczej się tego nie robi, chyba, że pisząc frontend)
komentarz 10 stycznia 2018 przez lewy Obywatel (1,260 p.)
wiekszosc jest stworzone przez srodowisko asp.net  a ja mam tylko problem z dodaniem kolejnego modelu do widoku zeby pobrac dane i przedstawic w widoku
komentarz 10 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)
Ale cała logika powinna się znajdować w kontrolerze. Model odpowiada za np. wyplucie danych z bazy, pobranie danych z API or shit, a widok ma tylko wyświetlić dane, bez jakichś większych przekształceń danych. Cała logika powinna być zamknięta w kontrolerach.
komentarz 10 stycznia 2018 przez lewy Obywatel (1,260 p.)
a jaki element dokladnie Cie zraził ?
komentarz 11 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
O stary to poleciałeś. Logika w kontrolerze ? Model zwraca dane ? idź się doucz a nie głupoty gadasz .
komentarz 11 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
Poza tym model to są właśnie dane. On zastosował architekturę MVC gdzie Ty mylisz to WebApi gdzie zwracamy suche dane zwane dalej modelem
komentarz 11 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)
Pulson, a gdzie wy ciebie powinna być zawarta logika, jak nie w kontrolerze?
komentarz 12 stycznia 2018 przez fenq80 Bywalec (2,940 p.)

CzikaCarry musiało ci się coś pocieszać.  ;).  Przypomnę mówimy o wzorcu MVC.  https://pl.m.wikipedia.org/wiki/ModeModel-View-Controller.  Przeczytaj co znaczy literka M.  Pozwolę sobie nawet zacytować "Model -  jest pewna reprezentacja problemu bądź logiki aplikacji". Musiało ci się coś pomylić,  zdarza się.  :)  

komentarz 12 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)
Z tego samego artykułu: "MVC zyskał dużą popularność wśród aplikacji WWW, jednak ze względu na specyfikę tego środowiska, oryginalne założenia wzorca musiały ulec pewnym modyfikacjom". Poza tym cytat przytoczony przez Ciebie mówi o tym, że model jest jakaś reprezentacją problemu, można to interpretować na różne sposoby. Między innymi dlatego cała, większa logika aplikacji (przypominam że mówimy i webDevie) jest zamknięta w kontrolerze. Podaj jakiś przykład aplikacji, w której np. wysyłaniem wiadomości e-mail zajmuje się model, a nie kontroler. W webDevie model to najczęściej dane lub ich reprezentacja (np. danych zwracanych z jakiegoś API czy z bazy danych), i raczej nic tego nie zmieni :)
komentarz 12 stycznia 2018 przez fenq80 Bywalec (2,940 p.)
Ale wysyłanie emailow to akcja nie logika. Mylisz pojęcia.  Proszę weź jakaś pierwsza książkę o mvc i poczytaj początkowe rozdziały.  Ja dopiero zaczynam się tego uczyć ale widzę ze błędnie mówisz.
komentarz 12 stycznia 2018 przez fenq80 Bywalec (2,940 p.)
Albo inaczej w modelu zaiwerasz logikę biznesowa. A w kontrolerze logikę aplikacji. I podanie modelu w widoku jest często stosowane (przynajmniej a ASP. Net)  do podawania danych z modelu do widoku.
komentarz 12 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)

Rozdzielanie logiki biznesowej i logiki aplikacji jest według mnie bez sensu, zwłaszcza, że w większości przypadków logika biznesowa to <1% kodu. Poza tym sam powiedziałeś, że model to logika biznesowa powołując się na Wikipedię, która mówi o logice aplikacji (patrz swój cytat z Wiki). Już sam nie wiem komu wierzyć. Jako logika w swoich poprzednich wypowiedziach miałem na myśli "Twoją" logikę aplikacji.

Co do użycia modelu w widoku - zamienia to jedną z zalet MVC w wadę. Nie po to oddzielamy np. HTML od PHP czy C# żeby go powtórnie mieszać. Do tego służą widoki, aby służyły jako szablony. Można oczywiście pisać coś w widokach, ale po co, skoro raz, że utrudnia debugowanie, dwa, że kod jest mało czytelny, i trzy, że zalety płynące z oddzielenia HTML od języka backendowego znikają?

komentarz 13 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
Panowie.

Już nie jedną aplikację stworzyłem i wiem jak to wygląda w kodzie. Aktualnie aplikację się oddziela od logika bazodanowej/biznesowej oraz widoku.

Kontroler - zwraca nam tylko wyniki

ViewModel - to co zwraca nam kontroler (obiekty)

Model - Model bazodanowy który jest mapowany przez ORM np. entitySerwis - Tutaj trzymamy całą logikę aplikację

W serwis to nic innego jak interfejs oraz klasa która go implementuje. Jest to bardzo dobre rozwiązanie ze względu na testy jednostkowe oraz wzorzec DI(plusów jest jeszcze więcej).  

 

 

Pamiętajcie, im bardziej rozbijecie aplikację na mniejsze komponenty tym łatwiej będzie wam zapanować nad kodem i będzie łatwiej go testować
komentarz 13 stycznia 2018 przez CzikaCarry Szeryf (75,340 p.)
Skoro ViewModel to nie korzystasz z MVC tylko MVVM :)
komentarz 13 stycznia 2018 przez pulson666 Stary wyjadacz (12,560 p.)
To że coś się nazywa podobnie nie oznacza tego samego. View Model jest tylko nazwa która pomaga zrozumieć że jest model dla bazy danych i model dla widoku. W mvvm nie masz kontrolera. Pamiętaj również że architekture  projektujesz pod aplikacje wykorzystując wiele innych architektur. Kolejna sprawa ze mvvm to jak już xamarain a nie asp

Podobne pytania

0 głosów
0 odpowiedzi 144 wizyt
0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 24 marca 2018 w C# przez tomek2323 Bywalec (2,050 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...