2012-02-20 43 views
0

我创造了这个视图模型:视图模型添加自定义类,其他类

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中。 Player类:

​​

感谢

+0

您的视图模型拥有(的)库? – 2012-02-20 17:45:28

+0

我在一些文章中发现它。猜猜我应该改变它 – 2012-02-20 17:51:41

回答

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"); 
+0

现在我有保存播放器的问题。它说与IEntityChangeTracker错误,并且我不能指向具有更多实例的对象实体。 – 2012-02-20 18:17:47

+0

不要认为它与这个问题有关。这也许:http://stackoverflow.com/questions/620084/how-to-get-rid-off-an-entity-object-cannot-be-referenced-by-multiple-instances – 2012-02-20 18:24:40