Nano Hash - криптовалюты, майнинг, программирование

Как привязать DbContext от модели к представлению

Я новичок в MVC и имею эту простую проблему (я думаю). У меня есть ДбКонтекст

public class UsersContext : DbContext
{
    public UsersContext() : base("Share_DB") {}
    public DbSet<ItemDB> Items { get; set; }
}

который содержит список элементов с идентификатором и заголовком:

[Table("Items")]
public class ItemDB
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Title { get; set; }
}

и я хочу привязать список со всеми элементами в таблице базы данных к модели. Однако я не могу понять, как это сделать.

В представлении (файл cshtml), я думаю, я определил, какую модель я должен использовать ( @model XXX.Models.ItemModel ), а затем отобразить ее примерно так:

<ul>
@foreach (XXX.Models.ItemModel.ItemDB item in @Items)
{
    <li>@item.Title</li>
}
</ul>

Однако он не может найти свойство @Items не найдено. Как мне это написать?


  • Я думаю, что определение вашей модели должно быть @model xxx.models.userscontext. отнесите свою модель к классу, который фактически содержит элементы 06.01.2013
  • Можете ли вы также включить код действий вашего контроллера? По сути, это место, где вы будете загружать данные модели из DbContext. Существуют различные способы сделать это, но наиболее очевидным является создание строго типизированного представления IEnumerable‹Item›. 06.01.2013
  • И у вашего представления есть модель свойства 06.01.2013

Ответы:


1

Способ работы MVC заключается в том, что когда вы возвращаете представление в свой контроллер, все, что передается в View(), становится свойством Model. Другими словами:

public ActionResult Index()
{
    return View("Hello World");
}

Передаст строку «Hello World» вашему представлению. Затем в верхней части файла Index.cshtml вам нужно объявить тип модели:

@model string

И использование становится:

<div>@Model</div>

В вашем случае вам просто нужно передать список элементов в представление и сообщить ему, что он ожидает правильный тип модели:

public ActionResult Index()
{
    using (var db = new UsersContext()) 
    {
        var items = db.Items.ToList();

        return View(items);
    }
}

а затем, на ваш взгляд:

@model IEnumerable<ItemDB>

и вы можете использовать его как:

@foreach (var item in Model)
{
    <div>@item.Title</item>
}
06.01.2013
  • Это вызывает и ошибку для меня, что предметы были удалены, какое-либо решение? 11.06.2017
  • Вы вызываете ToList() в своем запросе? Это фактически загрузит элементы в память, чтобы вы могли передать их в представление. 12.06.2017
  • Да, я делаю это точно так же, как и вы, но я получаю исключение, что элементы были удалены и недоступны. но когда я создаю Context без using, это работает. 12.06.2017
  • Это код, который я использую: using (IceBoardDbContet db = new IceBoardDbContext()) return View(db.Loans.Where(loan => loan.Direction == DirectionEnum.In).ToList()); 12.06.2017
  • Вы, вероятно, получаете доступ к чему-то в объекте кредита, который не загружен, и, поскольку DbContext был удален, вы получаете это исключение. Вы можете либо отключить ленивую загрузку (ленивая загрузка Google Entity Framework), либо использовать метод .Include() для загрузки дополнительных данных: db.Loans.Include(loan => loan.User).Where(....) 13.06.2017
  • Вероятно, вы правы, когда я прочитал ваше первое предложение, я сразу подумал о ленивой загрузке, я попробую это позже. потому что код не мой, я просто помогал своему другу.. Спасибо! Просто чтобы быть уверенным, всегда ли сначала удаляется Context, а затем обрабатывается мой View? 13.06.2017
  • Если вы заключите DbContext в оператор using(), он будет удален, когда управление перейдет к представлению. Когда вы не помещаете его в оператор using, он не удаляется, поэтому вы можете получить доступ к этим лениво загруженным свойствам. Лучшей практикой является обернуть его с помощью() и предварительно получить любые данные, которые вам понадобятся. В идеале представление не должно вызывать вызовы базы данных. 13.06.2017
  • Извините, но я все еще в замешательстве из-за этого предложения, которое будет удалено, когда управление перейдет к представлению, что означает, когда? на самом деле это либо после, либо до (и в зависимости от проблемы, скорее, до). И в любом случае, в вашем коде вы не использовали команду включения, так что вы имеете в виду, что должны были ее использовать? 13.06.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..