Доступ к данным localdb в представлении

#asp.net #asp.net-mvc #visual-studio #asp.net-core #localdb

#asp.net #asp.net-mvc #visual-studio #asp.net-core #localdb

Вопрос:

Я начинаю ASP.NET основной проект mvc сейчас, и у меня возникли проблемы с отображением информации в определенном представлении.

У меня есть 2 модели, которые содержат их специфику, и мне нужно иметь доступ к обеим в представлении, объявленном в HomeController. Вот одна из моделей:

 public class Tipo_Logradouro
    {
        public int Id  { get; set; }
        public string Abreviatura { get; set; }
        public string Nome_Tipo { get; set; }
    }
  

Я намерен представить «Abreviatura» и «Nome_Tipo» через таблицу cshtml со всеми уже зарегистрированными данными. Но когда я пытаюсь, это выдает ошибку экземпляра, и я не могу ее представить. Методы контроллера для этой модели были созданы с помощью scaffold.

Я не знаю, возможно ли это сделать или это что-то очень простое, но я начинаю и хочу разрешить эту ситуацию.

PS: cshtml, который я пытаюсь представить информацию, выходит за рамки ит.

Ответ №1:

У меня есть 2 модели, которые содержат их специфику, и мне нужно иметь доступ к обеим в представлении, объявленном в HomeController.

Хотя представление может принимать только один тип модели, у вас может быть несколько методов для отображения нескольких разных данных модели в одном представлении.

Первый способ:

Вы можете объединить две модели, которые должны отображать данные, в новую модель, а затем получить новую модель в представлении для отображения данных разных моделей.

 public class Tipo_Logradouro
    {
        public int Id  { get; set; }
        public string Abreviatura { get; set; }
        public string Nome_Tipo { get; set; }
    }
  

Другая модель:

    public class Person
    {
        public int Id { get; set; }
        public string Name{ get; set; } 
    }
  

Комбинированная новая модель:

 public class CombineModel
    {
        public List<Tipo_Logradouro> Tipo_Logradouros { get; set; }
        public List<Person> Persons { get; set; }
    }
  

контроллер:

 public IActionResult ShowData()
        { 
            CombineModel combineModel = new CombineModel()
            {
                Persons = _context.Person.ToList(),
                Tipo_Logradouros = _context.Tipo_Logradouro.ToList()
            };
            return View(combineModel);
        }
  

Вид:

 @model CombineModel
@{
    ViewData["Title"] = "ShowData";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>ShowData</h1>

<table class="table table-bordered">
    <tr>
        <td>Id</td>
        <td>Name</td>
    </tr>
    @foreach (var item in (IEnumerable<Person>)Model.Persons)
    {
        <tr>
            <td>@item.Id</td>
            <td>@item.name</td>
        </tr>
    }
</table>
<br />
<br />
<table class="table table-bordered">
    <tr>
        <td>Id</td>
        <td>Abreviatura</td>
        <td>Nome_Tipo</td>
    </tr>
    @foreach (var item in (IEnumerable<Tipo_Logradouro>)Model.Tipo_Logradouros)
    {
        <tr>
            <td>@item.Id</td>
            <td>@item.Abreviatura</td>
            <td>@item.Nome_Tipo</td>
        </tr>
    }
</table>
  

Второй способ:

Вы можете использовать ViewData для передачи другой модели для просмотра :

Контроллер:

  public IActionResult ShowData()
        {
            List<Tipo_Logradouro> data = _context.Tipo_Logradouro.ToList();
            ViewData["data"] = data;
            List<Person> persons= _context.Person.ToList();
            return View(persons);
        }
  

Вид:

 @model IEnumerable<Person>
@{
    ViewData["Title"] = "ShowData";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>ShowData</h1>

<table class="table table-bordered">
    <tr>
        <td>Id</td>
        <td>Name</td>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.Id</td>
            <td>@item.name</td>
        </tr>
    }
</table>
<br /><br />
<table  class="table table-bordered">
    <tr>
        <td>Id</td>
        <td>Abreviatura</td>
        <td>Nome_Tipo</td>
    </tr>
    @foreach (var item in (IEnumerable<Tipo_Logradouro>)ViewData["data"])
    {
        <tr>
            <td>@item.Id</td>
            <td>@item.Abreviatura</td>
            <td>@item.Nome_Tipo</td>
        </tr>
    }
</table>
  

Вот результат теста :

введите описание изображения здесь

Ответ №2:

Вам нужно перебрать список объектов Tipo_Logradouro и в цикле прочитать значение свойств Abreviatura и Nome_Tipo.

При отладке вы получаете свои данные из базы данных? Или вы используете базу данных в памяти?

Комментарии:

1. Я использовал localdb, но я смог разрешить ситуацию, спасибо