ViewModel将自定义类添加到另一个类

时间:2012-02-20 17:32:19

标签: c# asp.net-mvc-3 mvvm viewmodel

我创建了这个viewmodel:

public class PlayerViewModel
{
    PlayerRepository repo = new PlayerRepository();

    public Player Player { get; set; }
    public int SelectedUserID { get; set; }
    public SelectList Users { get; set; }


    public PlayerViewModel()
    {
        Player = new Player();
    }
    public PlayerViewModel(int id)
    {
        Player = repo.Retrieve(id);
        Users = new SelectList(repo.GetUsers());
        SelectedUserID = 0;
    }
}

我认为这是:

@Html.DropDownListFor(x => x.SelectedUserID, Model.Users)
        @Html.ValidationMessageFor(x => x.SelectedUserID)

这在控制器中:

[Authorize]
        public ActionResult Upravit(int id)
        {
            var playerview = new PlayerViewModel(id);
            return View(playerview);
        }
        [Authorize,HttpPost]
        public ActionResult Upravit(int id, PlayerViewModel playerView)
        {
            if (ModelState.IsValid)
            {
                playerView.Player.User = usRepo.GetUserById(playerView.SelectedUserID);
                repo.Save(playerView.Player);
                return RedirectToAction("Podrobnosti", new { id = playerView.Player.PlayerID });
            }
            return View(playerView);
        }

现在我遇到“字段SelectedUserID必须是数字”的问题。我有下拉列表UserName。我修改了很多次,我尝试使用Dictionary和其他方法,但总是有一些问题。所以我想问一下将自定义类User添加到类Player的最佳方法。 玩家类:

public class Player
    {
        // pokud použijeme virtual a vlastností tak nám EF rozšíří o další možnosti jako lazy loading a další
        [Key]
        public int PlayerID { get; set; }

        [Required]
        public string Name { get; set; }
        [Required]
        public string Surname { get; set; }

        public string PhotoUrl { get; set; }

        public string Post { get; set; }

        public virtual Team Team { get; set; }

        public virtual User User { get; set; }
        // public int UserID { get; set; }

        //public virtual ICollection<Article> Articles { get; set; }
        // Here could be next things as number, ...

    }

由于

1 个答案:

答案 0 :(得分:1)

使用此构造函数: http://msdn.microsoft.com/en-us/library/dd505286.aspx

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

这样的事情:

Users = new SelectList(repo.GetUsers(),"UserID", "UserName");