#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, но я смог разрешить ситуацию, спасибо