【问题标题】:Select one type of model from a Drop Down to populate a property on another model in ASP.NET MVC从下拉列表中选择一种模型以填充 ASP.NET MVC 中另一个模型的属性
【发布时间】:2014-06-11 17:19:10
【问题描述】:

我有一个名为 Player 的模型:

public class Player
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Wins { get; set; }
    public int Draws { get; set; }
    public int Losses { get; set; }
    public int League { get; set; }
    [Display(Name="GF")]
    public int GoalsFor { get; set; }
    [Display(Name="GA")]
    public int GoalsAgainst { get; set; }

    public int Points
    {
        get { return Wins * 3 + Draws; }
    }
}

.. 以及另一个名为 Result 的模型:

public class Result
{
    public int ID { get; set; }
    public Player Winner { get; set; }
    public Player Loser { get; set; }
    public bool Draw { get; set; }
    [Display(Name="Player A")]
    public Player PlayerA { get; set; }
    [Display(Name = "Player B")]
    public Player PlayerB { get; set; }
    [Display(Name = "Player A Goals")]
    public int PlayerAGoals { get; set; }
    [Display(Name = "Player B Goals")]
    public int PlayerBGoals { get; set; }
}

当我想创建一个新结果时,玩家列表被添加到控制器中的 ViewBag 并传递给视图:

public ActionResult Create()
{
    IEnumerable<Player> players = db.Players.ToList();
    ViewBag.Players = new SelectList(players, "Name", "Name");

    return View();
}

但是,当我想添加一个新结果并从视图的下拉列表中选择两个玩家的名字时,Result 对象上的这些 Player 属性为空。我希望它们包含 Player 对象。

下拉列表的填充方式是这样的:

@Html.LabelFor(model => model.PlayerA, new { @class = "control-label col-md-2" })
@Html.DropDownList("Players", "-- Select Player --")

有人能指出正确的方向吗?如何在下拉列表中正确填充这些属性,或者如何将 Player 对象正确分配给 Result.PlayerA 和 Result.PlayerB 属性?

【问题讨论】:

  • 我没有你的完整例子。但是您需要创建列表项。您可能会通过创建一个添加列表项的循环来做到这一点。
  • 你能提供一个你希望输出的样本吗?要么你返回错误类型的对象(玩家而不是结果),要么我错过了一些东西
  • 当您说它们在结果对象中为空时,您的意思是在 POST 中的 Create 方法?

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您需要定义下拉列表的项目。

 <div class="editor-field">
        @{
            List<SelectListItem> items = new List<SelectListItem>();
                //You may want to loop to generate your items.                 
                items.Add(new SelectListItem
                {
                    //Or you code that generates your SelectListItems
                    Text = "Your_Text_1", 
                    Value = "Your Value_1",
                });
            items.Add(new SelectListItem
                {
                    //Or you code that generates your SelectListItems
                    Text = "Your_Text_2", 
                    Value = "Your_Value_2",
                });
        }
        @Html.DropDownListFor(model => model.PlayerA, items)           
        @Html.ValidationMessageFor(model => model.PlayerA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多