Buduję katalog online na telefony, mam dwa kontroler do katalogu telefonicznego, a drugi na szczegóły telefonu Pomyśl, że z identyfikatorem telefonu łatwiej jest rozwiązać to zadanie, również używam wzór repozytorium.

Regulator tego katalogu:

public class PhonesCatalog : Controller
    {
        private readonly IPhoneRepository _repository;
        public int PageSize = 6;

        public PhonesCatalog(IPhoneRepository repository)
        {
            _repository = repository;
        }

       
        [HttpGet]
        public IActionResult Catalog(int productPage = 1)
            => View(new ProductsListViewModel 
            { 
                Phones = _repository.Phones
                    .OrderBy(x => x.PhoneId)
                    .Skip((productPage -1) * PageSize)
                    .Take(PageSize),
                PagingInfo = new PagingInfo
                {
                    CurrentPage = productPage,
                    ItemsPrePage = PageSize,
                    TotalItems = _repository.Phones.Count()
                }
            });
    }

Wzór repozytorium:

public interface IPhoneRepository
    {
        IQueryable<Phone> Phones { get; }
        Phone GetPhoneById(int id);
    }
public class EfMobileStoreRepository : IPhoneRepository
    {
        private readonly MobileStoreCatalogContext _context;

        public EfMobileStoreRepository(MobileStoreCatalogContext context)
        {
            _context = context;
        }

        public IQueryable<Phone> Phones => _context.Phones;

        public Phone GetPhoneById(int id) => _context.Phones
                                                    .FirstOrDefault(p => p.PhoneId == id);

    }

A oto kontroler szczegółów telefonu i widok:

public class PhonesDetails : Controller
    {
        private readonly IPhoneRepository _repository;

        public PhonesDetails(IPhoneRepository repository)
        {
            _repository = repository;
        }

        [HttpGet]
        public IActionResult Details(int id)
        {
            
            return View(_repository.GetPhoneById(id));
        }
    }
@model Mobile_Store_Catalog_wandio.Models.Phone
    <h4>Phone Details</h4>
<div class="row">
            <p>@Model.PhoneName</p>
            <p>@Model.Manufactor</p>
            <p>@Model.OperationSystem</p>
            <p>@Model.Processor</p>
            <p>@Model.Memory</p>
            <p>@Model.ScreenResolution</p>
            <p>@Model.Size</p>
            <p>@Model.Wight</p>
</div>

Tutaj widok katalogowy:

@model ProductsListViewModel
<h1>Phone Catalog</h1>
<div class="container-fluid">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3 btn-group-vertical text-center">
                Filter
                Search
            </div>
            <div class=" row col-md-9">
                @foreach (var p in Model.Phones)
                {
                    <div class=" col-md-4 border border-dark">
                        <a href="@Url.Action("Details", "PhonesDetails")">
                            <img class="img-fluid" src="/Images/@p.ImageName"/>
                        </a>
                        <p class="text-center container">@p.PhoneName</p>
                        <p class="text-white text-center bg-success">@p.Price.ToString("C2")</p>
                    </div>
                }
            </div>
        </div>
    </div>
</div>
<div class="row">
    <div page-model="@Model.PagingInfo" page-action="Catalog" page-classes-enabled="true"
         page-class="btn" page-class-normal="btn-outline-dark"
         page-class-selected="btn-primary" class="btn-group-toggle m-1 al">
    </div>
</div>

A oto kod Productvilist Code:

public class ProductsListViewModel
    {
        public IEnumerable<Phone> Phones { get; set; }
        public PagingInfo PagingInfo { get; set; }
    }

Problem polega na tym, że gdy klikam na obrazie telefonu, ale zajmuje tylko pierwszy identyfikator telefonu i zwraca jego szczegółów, nie ma znaczenia, który obraz jest klikany, ale muszę zwrócić szczegóły według ID, nie tylko pierwszy telefon ID Szczegół.

Co robię tutaj źle, czy ktoś może mi pomóc?

0
Aleko Mesarkishvili 22 październik 2020, 15:47

1 odpowiedź

Najlepsza odpowiedź

Możesz zmienić swój kod w ten sposób:

<a asp-controller="PhonesDetails" asp-action="Details" asp-route-id="@p.Id"> 

<img class="img-fluid" src="/Images/@p.ImageName"/></a>
0
Yinqiu 27 październik 2020, 09:59