를이 내 뷰 모델입니다 연결되지 내 문제는 내가 httppost 유효한 viewmodel에 도착, 플레이어 (그것은 사용자 정의 클래스 및 선수 클래스에서 그것은 가상 사용자 사용자)에 사용자를 추가하고 디버그에서 보면 (플레이어가 올바른 사용자를 포함하고 있지만) 다른 모든보기에서 플레이어를 검색하려고 할 때 다음에 사용자가있는 속성이 null입니다. 나는 그것을 데이터베이스에서 검사했고 사용자 ID가있는 열에 int가 없다. 어쩌면 누군가가 문제가있는 곳에서 나를 도울 수 있습니까? 왜 저축하지 않는거야?뷰 모델은 가상 클래스
편집 : 이것에
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
와 컨트롤러의 변화 : 내가이 내 저장소에 코드를 추가
[Authorize,HttpPost]
public ActionResult Upravit(int id, PlayerViewModel playerView)
{
if (ModelState.IsValid)
{
using (PlayerRepository playerRepository = new PlayerRepository())
{
playerView.Player.User = playerRepository.GetUserByID(playerView.SelectedUserID);
playerRepository.Save(playerView.Player);
return RedirectToAction("Podrobnosti", new { id = playerView.Player.PlayerID });
}
}
return View(playerView);
}
를하지만 도움이 않았나.
Edit2가 내 플레이어 및 사용자 클래스 :
public class User
{
public User()
{
}
public User(int userId, string userName, string firstName, string surname, string password, string email)
{
UserID = userId;
UserName = userName;
Name = firstName;
Surname = surname;
Password = password;
Email = email;
IsActivated = false;
}
[HiddenInput(DisplayValue = false)]
public int UserID { get; set; }
[Display(Name="Uživatelské jméno")]
[Required(ErrorMessage = "Je potřeba vyplnit uživatelské jméno.")]
[StringLength(20)]
public string UserName { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
[Display(Name = "Heslo")]
[DataType(DataType.Password)]
[Required(ErrorMessage = "Je potřeba vyplnit heslo.")]
[StringLength(30)]
public string Password { get; set; }
[Display(Name = "E-mail")]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessage = "Je potřeba vyplnit Váš e-mail.")]
[StringLength(30)]
public string Email { get; set; }
public IIdentity Identity { get; set; }
public string ImagePath { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual ICollection<Topic> Topics { get; set; }
public int RoleId { get; set; }
public virtual Role Role { get; set; }
public bool IsActivated { get; set; }
public string EmailKey { get; set; }
}
}
public class Player
{
[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; }
}
나는 컨트롤러의 모든 방법의 repo로 사용하여 추가 및 컨트롤러의 폐기 방법을 추가하고 지금은 데이터를 보여주는 문제가 있습니다. 예를 들어 Player.User.UserName을 보여 주려고 시도했을 때 (플레이어에 일부 사용자를 수동으로 추가 한 경우) 인스턴스 ObjectDataContext가 처리되었고 사용할 수 없다고합니다.
Entity Framework를 사용하고있는 것 같습니다.'Player' 및'User' 클래스의 소스 코드를 제공해 주시겠습니까? –
사용자 및 플레이어 클래스를 추가했습니다. –
예제 콘솔 응용 프로그램을 만들었습니다. 그것은 잘 작동합니다 :'Player'를 저장 한 후에 컨텍스트에서 올바른'User' 속성으로 얻었습니다. PlayerRepository.Retrieve() 메소드의 구현을 보여 주시겠습니까? –