본인에게는 여러 가지 수상 경력이 있으며 각 수상 내역에는 해당하는 자격 목록이 있습니다. 각 상을 표시하기 위해 ViewModel을 만들었으며 버튼을 클릭하면 모달이 관련 자격으로 표시되고 사용자가 완료/업데이트 한 것으로 표시 할 수 있습니다. 그러나 데이터의 게시물에만 내 첫 번째 수상 내 컨트롤러 메서드에서 바인딩됩니다. 내가 VS에서 디버깅 할 때 나머지는 Null로 컴백합니다. 데이터는 내보기에 예상대로 표시되며 각 수상은 관련 자격 만 표시합니다. 이를 도와 주신 것에 미리 감사드립니다.C# MVC ViewModel 게시 된 결과 1 개가 null 인 경우 기타
뷰 모델
public class CandidateExtended
{
public CandidateExtended()
{
this.Qualifications = new List<Qualification_Extended>();
}
public int AwardID { get; set; }
public int FrameworkID { get; set; }
public string ULN { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string TitleShort { get; set; }
public string TitleFull { get; set; }
public DateTime DOB { get; set; }
public string Award { get; set; }
public int AwardLevel { get; set; }
public string Status { get; set; }
public string Completion { get; set; }
public string SelectedRoute { get; set; }
public List<Qualification_Extended> Qualifications { get; set; }
public void addQualification(Qualification_Extended qualification)
{
Qualifications.Add(qualification);
}
}
컨트롤러
[HttpGet]
public ActionResult Index()
{
var awardDetails = (from award in db.award
join candidate in db.candidate
on award.ULN equals candidate.ULN
join framework in db.framework
on award.QAN equals framework.QAN
where award.OrganisationIdentityID == organisationID
select new AwardDetails_Extended
{
AwardID = award.AwardID,
ULN = award.ULN,
AwardStatus = award.AwardStatus,
Forename = candidate.Forename,
Surname = candidate.Surname,
DOB = candidate.DOB,
FrameworkID = framework.FrameworkID,
TitleFull = framework.TitleFull,
TitleShort = framework.TitleShort,
AwardLevel = framework.AwardLevel,
Award = framework.Award,
Completion = framework.Completion
}).ToList();
var qualificationDetails = (from candidateQualification in db.candidateQualification
join qualification in db.qualification
on candidateQualification.QualificationID equals qualification.QualificationID
select new Qualification_Extended
{
ID = candidateQualification.ID,
QualificationID = candidateQualification.QualificationID,
ULN = candidateQualification.ULN,
FrameworkID = candidateQualification.FrameworkID,
Achieved = candidateQualification.Achieved,
DateAchieved = candidateQualification.DateAchieved
}).ToList();
List<CandidateExtended> candidateVM = new List<CandidateExtended>();
foreach (var item in awardDetails)
{
CandidateExtended vm = new CandidateExtended();
vm.AwardID = item.AwardID;
vm.FrameworkID = item.FrameworkID;
vm.ULN = item.ULN;
vm.Forename = item.Forename;
vm.Surname = item.Surname;
vm.DOB = item.DOB;
vm.TitleShort = item.TitleShort;
vm.TitleFull = item.TitleFull;
vm.Award = item.Award;
vm.AwardLevel = item.AwardLevel;
vm.Status = item.AwardStatus;
vm.Completion = item.Completion;
vm.SelectedRoute = item.SelectedRoute;
foreach (var qualification in qualificationDetails)
{
if (qualification.ULN == item.ULN && qualification.FrameworkID == item.FrameworkID)
{
vm.addQualification(qualification);
}
}
candidateVM.Add(vm);
}
return View(candidateVM);
}
보기
@model List<Apprenticeship_SingleAward.ViewModels.CandidateExtended>
@{
ViewBag.Title = "Single Award Apprenticeships";
Layout = "~/Views/Shared/_Organisation.cshtml";
}
<div class="application-table table-responsive">
<table class="table table-striped administration-table">
<thead>
<tr class="admin-table-heading">
<th>ULN</th>
<th>First Name</th>
<th>Last Name</th>
<th>Title</th>
<th>Award</th>
<th>Level</th>
<th>Qualifications</th>
<th>Status</th>
</tr>
</thead>
<tbody>
@for (int j = 0; j < Model.Count(); j++)
{
var award = Model[j];
<tr>
<td>@award.ULN</td>
<td>@award.Forename</td>
<td>@award.Surname</td>
<td>@award.TitleShort</td>
<td>@award.Award</td>
<td>@award.AwardLevel</td>
<td>
<button class="btn qualificationbutton" data-toggle="modal" data-target="#@qualificationModal">@displayQualTotal<i class="glyphicon glyphicon-pencil org-edit-icon"></i></button>
@using (Html.BeginForm("UpdateAward", "Organisation", FormMethod.Post, new { id = award.AwardID}))
{
@Html.HiddenFor(a => Model[j].AwardID)
<div id="@qualificationModal" class="modal fade" role="dialog">
<div class="modal-dialog organisationmodal">
<div class="modal-content">
<div class="modal-body">
<h4 class="org-modal-subheading">@award.TitleShort</h4>
<br />
<div class="row">
<div class="col-md-12">
<div class="row org-row-main">
<div class="col-md-7"><h4 class="org-type">Qualification</h4></div>
<div class="col-md-2"><h5 class="org-completed">Completed</h5></div>
<div class="col-md-3"><h5 class="org-date">Date</h5></div>
</div>
<hr class="org-hr"/>
@for (int i = 0; i < Model[j].Qualifications.Count(); i++)
{
<div class="row org-row">
<div class="col-md-7">
@Html.HiddenFor(a => Model[j].Qualifications[i].ID)
</div>
<div class="col-md-2">
@Html.CheckBoxFor(a => Model[j].Qualifications[i].Achieved)
</div>
<div class="col-md-3"
>@Html.TextBoxFor(a => Model[j].Qualifications[i].DateAchieved, "{0:dd/MM/yyyy}")
</div>
</div>
}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn ccea-signout" data-dismiss="modal">Close</button>
<button type="submit" class="btn admin-button" style="margin-top: 0;">Save</button>
</div>
</div>
</div>
</div>
}
</td>
<td>
@{
var status = award.Status;
if (status == "In Progress")
{
<button class="btn progressbutton" style="margin: 0;">@status</button>
}
}
</td>
</tr>
}
</tbody>
</table>
UpdateAward
[HttpPost]
public ActionResult UpdateAward(List<CandidateExtended> Model)
{
return RedirectToAction("Index", "Login");
}
"그러나 데이터 첫 번째 보너스 만 내 컨트롤러에서 바인딩됩니다"- 한 번에 하나의 보너스를 게시하므로이 진술을 이해할 수 없습니다. –
예 한 번에 한 보너스를 게시합니다. 페이지에 표시된 첫 번째 시상은 잘 게시되고 테스트 할 때 바인딩됩니다. 그러나 이후에 내가 표시되는 다른 상을 시도 할 때 게시 할 때 그들은 바인딩되지 않으며 VS에서 null입니다. @RyanSearle –
신청서에 무엇이 보내어 지는지 살펴보십시오. Chrome 공개 개발자 도구의 경우 네트워크 탭에서 요청을 찾아 필요한 경우 답변을 붙여 넣습니다. –