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

0 głosów
257 wizyt
pytanie zadane 9 stycznia 2018 w C# i .NET 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,580 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,580 p.)
I oczywiście zwróć obiekt klasy JakiśModel
0 głosów
odpowiedź 10 stycznia 2018 przez CzikaCarry Szeryf (75,440 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 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,440 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,580 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,440 p.)
Skoro ViewModel to nie korzystasz z MVC tylko MVVM :)
komentarz 13 stycznia 2018 przez pulson666 Stary wyjadacz (12,580 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 35 wizyt
0 głosów
1 odpowiedź 99 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

66,494 zapytań

113,266 odpowiedzi

239,865 komentarzy

46,630 pasjonatów

Przeglądających: 146
Pasjonatów: 0 Gości: 146

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...