【问题标题】:Html.RenderAction from another controller with passed parameterHtml.RenderAction 从另一个控制器传递参数
【发布时间】:2015-01-29 10:37:29
【问题描述】:

我有 2 个模型:PlayerPlayerAchievement

 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; }
    //TODO: Remember to change variable name
    [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 class PlayerAchievement
{
    [Key]        
    public String playerID { get; set; }               
    [Required]
    public String achievementName { get; set; }
    [Required]
    public int number { get; set; }
}

播放器Details视图,显示播放器的详细信息。我想在那里渲染 ShowPlayerAchievement 视图。但是,ShowPlayerAchievement 动作在 PlayerAchievement 控制器

public ActionResult ShowAchievementsList(String playerID)
{
   return View(_repository.GetPlayerAchievementsByPlayerID(playerID));
}

如上所示,该方法需要播放器的playerID,所以我在Player的Details.cshtml中尝试了@Html.RenderAction的这段代码 看看它是否有效,但它没有。

@Html.RenderAction("ShowAchievementsList", "PlayerAchievement", new { playerID = Model.id })

总而言之,我如何使用来自 Player 的 playerID 参数从 PlayerAchievement 控制器调用 ShowAchievementList 操作?

更新 此代码不显示错误 @Html.Action("ShowAchievementsList", "PlayerAchievement", new { playerID = Model.id });

但是我在 PlayerAchievementRepository 类的构造函数中得到了 NullRefferenceException。

公共类 PlayerAchievementRepository : IPlayerAchievementRepository {

    public List<PlayerAchievement> allPlayerAchievements;
    private XDocument playerAchievementData;

    public PlayerAchievementRepository()
    {
        allPlayerAchievements = new List<PlayerAchievement>();

        playerAchievementData = XDocument.Load(HttpContext.Current.Server.MapPath("~/App_Data/player_management.xml"));
//Error show here
        var playerAchievements = from playerAchievement in playerAchievementData.Descendants("player_achievement")                                     
                      select new PlayerAchievement((int) playerAchievement.Element("number"), playerAchievement.Element("playerID").Value, 
                          playerAchievement.Element("achievementName").Value);                allPlayerAchievements.AddRange(playerAchievements.ToList<PlayerAchievement>());
//other logic codes...

    }

在 player_management.xml 中

<player_achievement>
        <number>3</number>
        <playerId>01</playerId>
        <achievementName>European Cup</achievementName>
</player_achievement>

【问题讨论】:

    标签: asp.net-mvc renderaction


    【解决方案1】:

    尝试以下两种语法之一:

     @{Html.RenderAction("ShowAchievementsList", "PlayerAchievement", new { playerID = Model.id });}
    

     @Html.Action("ShowAchievementsList", "PlayerAchievement", new { playerID = Model.id });
    

    【讨论】:

      【解决方案2】:

      试试下面的

      @{
      @Html.RenderAction("ShowAchievementsList", "PlayerAchievement", new { playerID = Model.id })
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        相关资源
        最近更新 更多