Привет Я довольно новичок в Asp.Net Mvc5, а также C#, и я надеюсь получить несколько указателей здесь, я пытался выяснить, почему я получаю следующую ошибку:Asp.net ViewModel return null
Элемент модели, переданный в словарь, имеет тип 'System.Data.Entity.DbSet 1[SoccerTeams.Models.Player]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [SoccerTeams.Models.ViewModels.TeamViewModel]'.
Однако теперь после отладки я понял, что объект ViewModel фактически возвращает нулевые значения для всех элементов. Я создал страницу, которая работает правильно для добавления команды, а также игроков для этой команды. В моей базе данных команды имеют одну таблицу, и все игроки находятся в другой таблице, в которой каждый игрок имеет имя команды с ним (имя игрока и команды состоит из двух отдельных столбцов), поэтому его можно связать с правильной командой. Я создал ViewModel, и я пытаюсь вызвать этот ViewModel и иметь возможность вернуть всех игроков в представление, чтобы я мог показать их в списке.
Мой контроллер команды для «Просмотреть все игроки смотреть» выглядит следующим образом:
public ActionResult ViewAllPlayers()
{
TeamViewModel teamView = new TeamViewModel();
return View(teamView);
}
Моя команда Модель выглядит следующим образом:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SoccerTeams.Models
{
// This teams class will be used to represent the teams in the database
public class Team
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string TeamName { get; set; }
public string Coach { get; set; }
public string Conference { get; set; }
}
}
Мой плеер Модель выглядит следующим образом:
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SoccerTeams.Models
{
public class Player
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public Guid TeamId { get; set; }
public string Name { get; set; }
}
}
My ViewModel выглядит следующим образом:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SoccerTeams.Models.ViewModels
{
public class TeamViewModel
{
public string TeamName { get; set; }
public string Coach { get; set; }
public string Conference { get; set; }
public List<Player> Players { get; set; }
}
}
Моя CreateTeam действие следующим образом:
public async Task<ActionResult> Create(TeamViewModel model, string addfiverows)
{
if (ModelState.IsValid)
{
if (!string.IsNullOrEmpty(addfiverows)) return View(model);
var team = new Team { TeamName = model.TeamName, Coach = model.Coach, Conference = model.Conference };
db.Teams.Add(team);
var result = await db.SaveChangesAsync();
if(result > 0)
{
foreach(var player in model.Players)
{
var p = new Player { Name = player.Name, Id = team.Id };
db.Players.Add(p);
}
result = await db.SaveChangesAsync();
}
if(result > 0) return RedirectToAction("Index");
}
return View();
}
Мой Посмотреть Я пытаюсь отобразить на это следующим образом:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@model SoccerTeams.Models.ViewModels.TeamViewModel
@{
ViewBag.Title = "View All Players";
}
<h2>View All Players</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.TeamName)
</th>
<th>
@Html.DisplayNameFor(model => model.Players)
</th>
<th></th>
</tr>
@foreach (var item in Model.Players)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.TeamName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Players)
</td>
</tr>
}
</table>
Из исследования я думал, что проблема что-то делать с @model IEnumerable. Однако после разговора с @Tony Bao, оспаривающим мое понимание, я заметил, что Viewmodel фактически возвращает поля, но с нулевыми значениями.
Любые руководства/учебные пособия, которые вы можете предложить, будут высоко оценены, поскольку я ищу не только решение, но и лучшее понимание того, почему это происходит и как правильно использовать ViewModel.
Вы Infact посылая неправильную модель от контроллера. Ваш контроллер отправляет список игроков, пока ваше представление ожидает List. Отправка правильной модели из контроллера должна решить проблему –
Я попытался сделать то, что вы сказали, но говорит, что TeamViewModel - это тип, который недопустим в данном контексте. Не могли бы вы привести пример? – L1ghtk3ira
Я попробовал «return View (TeamViewModel)»; и ошибка выше - это то, что я получил. Я не думаю, что делаю это правильно. – L1ghtk3ira