noobness noobness으로 보내주십시오, MVC 패턴에 초보자입니다. 나는 내 사이트에 등록 된 사용자에 대한 프로필 정보 페이지를 구축하고MVC 4 - 부분보기에서 다른 모델 사용
할 노력하고있어 무엇
. 이 페이지는 생년월일, 전화 번호, 가입 상태 등과 같은 사용자에 관한 데이터를 나열합니다. 아이디어를 얻습니다. 또한 사용자가 암호, 전자 메일 주소, 개인 정보를 같은 페이지에 바꿀 수있는 양식을 갖고 싶습니다.
내 문제는 사용자의 데이터가 전달 된 모델 변수를 통해 내 컨트롤러에서 오는
:
public ActionResult Profil()
{
var model = db.Users.First(e => e.UserName == WebSecurity.CurrentUserName);
return View(model);
}
출력은 내보기에 다음과 같습니다 :
<label>Phone number: </label>
@if (Model.PhoneNumber != null)
{
@Model.PhoneNumber
}
else
{
<span class="red">You haven't set up your phone number yet. </span>
}
양식 사용자가 자신의 정보를 변경할 수있는 다른 모델 인 ProfileModel을 사용합니다. 그래서 basiccaly 나는 정보를 출력하기위한 것과 데이터를 게시하기위한 두 가지 모델을 사용해야합니다.
이@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.Partial("_ModifyProfileInfo")
}
다음 부분보기입니다 :
여기The model item passed into the dictionary is of type 'Applicense.Models.User', but this dictionary requires a model item of type 'Applicense.Models.ProfileModel'.
이 같은 부분보기에 내 전화 보이는 내용은 다음과 같습니다
나는 부분 뷰를 사용하여 내가 이것을 달성 할 수있는,하지만 난이 오류가 있다고 생각public class ProfileModel
{
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "New e-mail address")]
public string Email { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "Confirm new e-mail address")]
[Compare("Email", ErrorMessage = "The e-mail and it's confirmation field do not match.")]
public string ConfirmEmail { get; set; }
}
: 마침내 여기 @model Applicense.Models.ProfileModel
<ul>
<li>
@Html.LabelFor(m => m.Email)
@Html.EditorFor(m => m.Email)
</li>
<li>
@Html.LabelFor(m => m.ConfirmEmail)
@Html.EditorFor(m => m.ConfirmEmail)
</li>
<input type="submit" value="Update e-mail" />
</ul>
그리고 내 ProfileModel입니다
나는 뭔가를 놓친 것입니까? 이 작업을 수행하는 적절한 방법은 무엇입니까?
편집 : Nikola Mitev의 대답을 반영하는 코드를 다시 작성했지만 지금은 또 다른 문제가 있습니다. 다음은 내가 얻은 오류입니다.
Object reference not set to an instance of an object. (@Model.UserObject.LastName)
변경된 전자 메일 주소 값을 게시 할 때만 발생합니다. 여기 내 뷰 모델 (ProfileModel.cs는)입니다 :
public class ProfileModel
{
public User UserObject { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Új e-mail cím")]
public string Email { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "Új e-mail cím megerősítése")]
[Compare("Email", ErrorMessage = "A két e-mail cím nem egyezik.")]
public string ConfirmEmail { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name= "E-mail cím")]
public string ReferEmail { get; set; }
}
컨트롤러 : 마침내 여기
public ActionResult Profil()
{
var User = db.Users.First(e => e.UserName == WebSecurity.CurrentUserName);
var ProfileViewModel = new ProfileModel
{
UserObject = User
};
return View(ProfileViewModel);
}
그리고의 내 user.cs
모델 클래스 :
[Table("UserProfile")]
public class User
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Column("UserName")]
public string UserName { get; set; }
[Column("Email")]
[Required]
public string Email { get; set; }
[Column("FirstName")]
public string FirstName { get; set; }
[Column("LastName")]
public string LastName { get; set; }
[Column("PhoneNumber")]
public string PhoneNumber { get; set; }
... You get the idea of the rest...
I 모델이 있기 때문에 무슨 일이 일어나고 생각하고 있어요 각 required
열의 데이터를 데이터베이스에 저장하려고합니다.
Edit2가 : 내하기 Profil 조치의 httppost 방법 :
컨트롤러에 정의 된대로ViewData
를 보낼 수 있습니다 @Html.Partial
의 과부하가있다 [HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult Profil(ProfileModel model)
{
if (ModelState.IsValid)
{
//insert into database
return Content("everything's good");
}
else
{
//outputs form errors
return View(model);
}
}
감사합니다 당신을 위해 쉽게 사용할 수있게, 마치 마법처럼 작동합니다! :) +1 또한 아주 잘 쓰여진 답. – PeterInvincible
다른 오류가 발생했습니다 : (나는 그것을 반영하기 위해 질문을 편집했습니다. – PeterInvincible
@Tharline은 성함 필드에 값을 가져 오는 특정 레코드가 있습니까? –