사용자에게 Person의 XApplication
상태를 Accepted 또는 Rejected 로 변경하라는 메시지를 표시하는 ViewModel을 기반으로하는 양식이 있습니다 .
POST를 통해 양식을 제출할 때 새 항목을 XApplication
만들고 성공하면 사용자를 동일한 페이지로 되돌리고 싶습니다 . 오류가있는 경우를 전달하여 양식을 다시로드하고 싶습니다 . View(personApp)
그러면 razor 메서드를 통해 오류가 표시됩니다 @Html.ValidationSummary()
.
그러나이 작업을 시도하고 수행하면 View ()가 내 SelectList에 대해 알지 못하며 드롭 다운을 "Application Accepted"및 "Application Rejected"로 채울 수 없습니다.
내가 취할 수있는 다른 접근 방법이 있습니까?
[Route("student/xApplication/{personId?}")]
[HttpGet]
public ActionResult xApplication(int? personId)
{
if (personId == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Person person = db.People.Find(personId);
if (person == null)
{
return HttpNotFound();
}
// Prepare ViewModel to pass to view, based on personId
PersonViewModel personVModel = new PersonViewModel();
personVModel.Person = person;
// Get XApplication Data
var xApps = from a in db.XApplications where a.personId == personId select a;
XApplication personXApplication = null;
if (xApps.Count() > 0)
{
personXApplication = xApps.First();
}
personVModel.XApplications = personXApplication;
List<SelectListItem> applicationStatusItems = new List<SelectListItem>();
applicationStatusItems.Add(new SelectListItem { Value = "1", Text = "Application Accepted" });
applicationStatusItems.Add(new SelectListItem { Value = "0", Text = "Application Rejected" });
SelectList applicationStatusList = new SelectList(applicationStatusItems, "Value", "Text", null);
personVModel.ApplicationStatusList = applicationStatusList;
return View(personVModel);
}
[HttpPost]
[Route("student/xApplication")]
public ActionResult xApplication(PersonViewModel personVModel)
{
if (ModelState.IsValid)// Checks no errors
{
db.XApplications.Add(personVModel.XApplications);
db.SaveChanges();
return Redirect("/student/xApplication/" + personVModel.Person.id);
}
return View(personVModel);
}
이 때문에 SelectList
하드 코딩, 나는 내부를 생성 제안 PersonViewModel
피하기 코드 중복에. 를 생성하는 코드를 SelectList
라는 공용 메서드 로 이동 PopulateApplicationStatusList
하고 생성자에서 호출하면됩니다.
public class PersonViewModel
{
public PersonViewModel()
{
this.PopulateApplicationStatusList();
}
public SelectList ApplicationStatusList { get; set; }
public void PopulateApplicationStatusList()
{
List<SelectListItem> applicationStatusItems = new List<SelectListItem>();
applicationStatusItems.Add(new SelectListItem { Value = "1", Text = "Application Accepted" });
applicationStatusItems.Add(new SelectListItem { Value = "0", Text = "Application Rejected" });
this.ApplicationStatusList = new SelectList(applicationStatusItems, "Value", "Text", null);
}
}
get 작업 메서드에서 ApplicationStatusList
새 인스턴스를 만들 때 생성됩니다.PersonViewModel
[Route("student/xApplication/{personId?}")]
[HttpGet]
public ActionResult xApplication(int? personId)
{
if (personId == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Person person = db.People.Find(personId);
if (person == null)
{
return HttpNotFound();
}
// Prepare ViewModel to pass to view, based on personId
PersonViewModel personVModel = new PersonViewModel(); // ApplicationStatusList is generated here
personVModel.Person = person;
// Get XApplication Data
var xApps = from a in db.XApplications where a.personId == personId select a;
XApplication personXApplication = null;
if (xApps.Count() > 0)
{
personXApplication = xApps.First();
}
personVModel.XApplications = personXApplication;
return View(personVModel);
}
작업 후 메서드에서 메서드 ApplicationStatusList
를 호출하여 오류가 발생하면 속성 을 다시 채울 수 있습니다.PopulateApplicationStatusList
[HttpPost]
[Route("student/xApplication")]
public ActionResult xApplication(PersonViewModel personVModel)
{
if (ModelState.IsValid)// Checks no errors
{
db.XApplications.Add(personVModel.XApplications);
db.SaveChanges();
return Redirect("/student/xApplication/" + personVModel.Person.id);
}
// repopulate ApplicationStatusList property
personVModel.PopulateApplicationStatusList();
return View(personVModel);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다