属性的值未显示在视图中
Attribute's value not shown in View
我正在开发 ASP.NET MVC 项目,该项目使用 XML 文件作为数据源。我在显示虚拟 属性 的属性时遇到问题。
首先,我有3个模型classes
玩家:
public class Player
{
[Required]
public String clubName { get; set; }
[Required]
public String id { get; set; }
[Required]
public int number { get; set; }
[Required]
public String name { get; set; }
[Required]
public String position { get; set; }
[Required]
public DateTime dateOfBirth { get; set; }
[Required]
public string placeOfBirth { get; set; }
[Required]
public double weight { get; set; }
[Required]
public double height { get; set; }
[Required]
public String description { get; set; }
[Required]
public String imageLink { get; set; }
[Required]
public Boolean status { get; set; }
public virtual ICollection<PlayerAchievement> achievements { get; set; }
}
成就
public class Achievement
{
[Key]
public String name { get; set; }
[Required]
public String imageLink { get; set; }
public virtual ICollection<PlayerAchievement> playerAchievements { get; set; }
public Achievement()
{
this.name = null;
this.imageLink = null;
}
public Achievement(String name, String imageLink)
{
this.name = name;
this.imageLink = imageLink;
}
}
和Player_Achievement class:
public class PlayerAchievement
{
[Key]
public String playerId { get; set; }
[Required]
public String achievementName { get; set; }
[Required]
public int number { get; set; }
public virtual Player player { get; set; }
public virtual Achievement achievement { get; set; }
public PlayerAchievement()
{
this.playerId = null;
this.achievementName = null;
this.number = 0;
}
public PlayerAchievement(int number, String playerId, String achievementName)
{
this.playerId = playerId;
this.achievementName = achievementName;
this.number = number;
}
}
我也有这 3 个 classes 的存储库,下面是 PlayerAchievement 的存储库:
public class PlayerAchievementRepository : IPlayerAchievementRepository
{
public List<PlayerAchievement> allPlayerAchievements;
private XDocument playerAchievementData;
public PlayerAchievementRepository()
{
//Code get all player_achievement in xml file
}
public IEnumerable<PlayerAchievement> GetPlayerAchievementsByPlayerID(String id)
{
return allPlayerAchievements.FindAll(item => item.playerId.Equals(id));
}
}
现在。我想查看玩家的成就列表。所以在 PlayerAchievementsController 的 Index 动作中,我写了这段代码:
public ActionResult Index(String id)
{
return View(_repository.GetPlayerAchievementsByPlayerID(id));
}
但是,Index 视图仅显示 PlayerAchievement 的数量以及图像 link 和名称的空值。不知道为什么能取到1个属性的值,其他的就取不到。
索引视图部分代码:
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.achievement.imageLink)
</th>
<th>
@Html.DisplayNameFor(model => model.number)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.achievement.imageLink)
</td>
<td>
@Html.DisplayFor(modelItem => item.number)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.playerId }) |
@Html.ActionLink("Details", "Details", new { id=item.playerId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.playerId })
</td>
</tr>
看看我在 GitHub 上的项目:https://github.com/quyetnv8893/PlayerManagement
我从 git hub 得到了你的代码的副本,有一点点变化,请将 AchievementRepository.cs
第 39 行的代码更改为
achievementData.Descendants("achievements").FirstOrDefault().Add(new XElement("achievement",
new XElement("name", achievement.name), new XElement("imageLink", achievement.imageLink)));
因为您之前的代码正在创建无效的 xml 标签层次结构。
问题解决:我没有读取PlayerAchievement的相关数据,所以PlayerAchievement中的Achievement属性目前为空。为解决此问题,已在 PlayerAchievement
的 Index 操作中更新此代码
public ActionResult Index(String id)
{
private IAchievementRepository _achievementRepository = new AchievementRepository();
var playerAchievements = _repository.GetPlayerAchievementsByPlayerID(id)
.Where(achievement => achievement.PlayerID.Equals(id));
foreach (var achievement in playerAchievements)
{
achievement.Achievement = _achievementRepository.GetAchievementByName(achievement.AchievementName);
}
return View(playerAchievements.ToList());
}
和使用dbContext.Include()
一样
我正在开发 ASP.NET MVC 项目,该项目使用 XML 文件作为数据源。我在显示虚拟 属性 的属性时遇到问题。
首先,我有3个模型classes
玩家:
public class Player
{
[Required]
public String clubName { get; set; }
[Required]
public String id { get; set; }
[Required]
public int number { get; set; }
[Required]
public String name { get; set; }
[Required]
public String position { get; set; }
[Required]
public DateTime dateOfBirth { get; set; }
[Required]
public string placeOfBirth { get; set; }
[Required]
public double weight { get; set; }
[Required]
public double height { get; set; }
[Required]
public String description { get; set; }
[Required]
public String imageLink { get; set; }
[Required]
public Boolean status { get; set; }
public virtual ICollection<PlayerAchievement> achievements { get; set; }
}
成就
public class Achievement
{
[Key]
public String name { get; set; }
[Required]
public String imageLink { get; set; }
public virtual ICollection<PlayerAchievement> playerAchievements { get; set; }
public Achievement()
{
this.name = null;
this.imageLink = null;
}
public Achievement(String name, String imageLink)
{
this.name = name;
this.imageLink = imageLink;
}
}
和Player_Achievement class:
public class PlayerAchievement
{
[Key]
public String playerId { get; set; }
[Required]
public String achievementName { get; set; }
[Required]
public int number { get; set; }
public virtual Player player { get; set; }
public virtual Achievement achievement { get; set; }
public PlayerAchievement()
{
this.playerId = null;
this.achievementName = null;
this.number = 0;
}
public PlayerAchievement(int number, String playerId, String achievementName)
{
this.playerId = playerId;
this.achievementName = achievementName;
this.number = number;
}
}
我也有这 3 个 classes 的存储库,下面是 PlayerAchievement 的存储库:
public class PlayerAchievementRepository : IPlayerAchievementRepository
{
public List<PlayerAchievement> allPlayerAchievements;
private XDocument playerAchievementData;
public PlayerAchievementRepository()
{
//Code get all player_achievement in xml file
}
public IEnumerable<PlayerAchievement> GetPlayerAchievementsByPlayerID(String id)
{
return allPlayerAchievements.FindAll(item => item.playerId.Equals(id));
}
}
现在。我想查看玩家的成就列表。所以在 PlayerAchievementsController 的 Index 动作中,我写了这段代码:
public ActionResult Index(String id)
{
return View(_repository.GetPlayerAchievementsByPlayerID(id));
}
但是,Index 视图仅显示 PlayerAchievement 的数量以及图像 link 和名称的空值。不知道为什么能取到1个属性的值,其他的就取不到。
索引视图部分代码:
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.achievement.imageLink)
</th>
<th>
@Html.DisplayNameFor(model => model.number)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.achievement.imageLink)
</td>
<td>
@Html.DisplayFor(modelItem => item.number)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.playerId }) |
@Html.ActionLink("Details", "Details", new { id=item.playerId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.playerId })
</td>
</tr>
看看我在 GitHub 上的项目:https://github.com/quyetnv8893/PlayerManagement
我从 git hub 得到了你的代码的副本,有一点点变化,请将 AchievementRepository.cs
第 39 行的代码更改为
achievementData.Descendants("achievements").FirstOrDefault().Add(new XElement("achievement",
new XElement("name", achievement.name), new XElement("imageLink", achievement.imageLink)));
因为您之前的代码正在创建无效的 xml 标签层次结构。
问题解决:我没有读取PlayerAchievement的相关数据,所以PlayerAchievement中的Achievement属性目前为空。为解决此问题,已在 PlayerAchievement
的 Index 操作中更新此代码public ActionResult Index(String id)
{
private IAchievementRepository _achievementRepository = new AchievementRepository();
var playerAchievements = _repository.GetPlayerAchievementsByPlayerID(id)
.Where(achievement => achievement.PlayerID.Equals(id));
foreach (var achievement in playerAchievements)
{
achievement.Achievement = _achievementRepository.GetAchievementByName(achievement.AchievementName);
}
return View(playerAchievements.ToList());
}
和使用dbContext.Include()
一样