У меня есть простая реляционная база данных для моего проекта. Я пытаюсь интегрировать соединение между таблицами для представления списка, а затем для заполнения данных формы и списка выбора.
У меня есть класс для команд и один для местоположений, оба из которых совместно используют LocationId в качестве FK. Мне нужно отобразить информацию о команде и ИМЯ местоположения в зависимости от значения LocationId в таблице команд. Это должно быть легко, но я новичок в EF и не могу заставить его работать.
Я создал ViewModel для класса Teams и добавил список «Location», как вы увидите в коде ниже .
У меня есть две проблемы: нет результатов для Location в представлении (я все равно не знаю, как присоединить это к LocationId), поэтому, если он отображает что-то, это будет неправильно. Вторая проблема заключается в том, что, несмотря на то, что у меня есть Местоположение, доступное в Представлении, у меня нет возможности перейти к Имени.
Мой класс местоположений
public class Locations
{
[Key]
public int LocationId { get; set; }
[Required(ErrorMessage = "Please enter a Location Name")]
[MaxLength(50, ErrorMessage = "Name cannot exceed 50 characters")]
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
[Required]
[Range(0, 99999, ErrorMessage = "Please enter a valid Zip Code")]
public int ZipCode { get; set; }
[Required(ErrorMessage = "Please enter a Phone Number")]
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Please enter a valid Phone Number")]
public string Telephone { get; set; }
[Required(ErrorMessage = "Please enter an Email Address")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$",
ErrorMessage = "The Email Address you have Entered is Invalid")]
public string Email { get; set; }
public string Website { get; set; }
[Required]
[Display(Name = "Is Active?")]
public bool IsActive { get; set; }
}
Класс моих команд
public class TeamsViewModel
{
[Key]
public int TeamId { get; set; }
[Required(ErrorMessage = "Please enter a Team Name")]
[MaxLength(50, ErrorMessage = "The Team Name cannot exceed 50 characters")]
public string Name { get; set; }
[Required]
[Range(1, 99999, ErrorMessage = "Please Select a Home Location")]
[Display(Name = "Home Location")]
public int LocationId { get; set; }
[Required]
[Display(Name = "Is Active?")]
public bool IsActive { get; set; }
public List<Locations> Location { get; set; }
}
Действие моего контроллера для этой страницы
public IActionResult Teams()
{
var model = _teamRepository.GetAllTeams();
return View("Teams", model);
}
И часть моего взгляда
@foreach (var team in Model)
{
<tr class="tblRow">
<td>@team.Name</td>
**<td>@team.Location</td>**
<td>
<a class="btn btn-outline-info m-1"
asp-controller="admin" asp-action="editTeam" asp-route-id="@team.Location">
Edit
</a>
</td>
<td>
@using (Html.BeginForm("DeleteTeam", "Admin", team))
{
<input type="submit" value="Delete"
class="btn btn-outline-danger m-1"
onclick="return confirm('Are you sure you wish to delete this Team?');" />
}
</td>
<td class="activeStatus" style="display:none;">
@team.IsActive
</td>
</tr>
}