【问题标题】:Returning object details in the View based on the object ID ASP.net core MVC基于对象ID ASP.net core MVC在View中返回对象详细信息
【发布时间】:2020-10-22 12:47:20
【问题描述】:

我正在为手机建立在线目录,我有两个控制器,一个用于手机目录,第二个用于手机详细信息。有了目录一切都很好,现在我的目标是在点击手机名称或照片后查看手机详细信息目录。我认为使用手机的 id 更容易解决此任务,我也使用存储库模式。

此目录的控制器:

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()
                }
            });
    }

存储库模式:

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);

    }

这里是电话详细信息控制器和视图:

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>

这里目录视图:

@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>

这是 ProductViewList 代码:

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

问题是当我点击手机图片时,它只需要手机的第一个id并返回它的详细信息,点击哪个图片都没有关系,但我需要通过id返回详细信息,不仅第一个 id 电话详细信息。

我在这里做错了什么,有人可以帮助我吗?

【问题讨论】:

  • 当你点击手机图片时,是否应该触发来自“PhoneDetails”控制器的“Details”操作方法?
  • 如何通过click事件访问details方法?你能分享你的点击事件的代码吗?看来问题出在了。
  • 我分享了目录查看代码@Yinqiu
  • 是的@GicuMironica,我想触发详细信息操作
  • 您是如何将 ID 传递给您的详细信息操作的?

标签: entity-framework asp.net-core model-view-controller linq-to-entities repository-pattern


【解决方案1】:

您可以像这样更改您的代码:

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

<img class="img-fluid" src="/Images/@p.ImageName"/></a>

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多