PROPERTY
VM이 있는데 List<FounderInvestmentViewModel>
이 포함 된 VM입니다. FounderInvestmentViewModel
의 부분보기를 주 생성 속성보기에 성공적으로 삽입했습니다.다른 부분보기 문제 내부에 부분보기 삽입
FounderInvestmentViewModel은 차례로 List<InstallmentDetailsViewModel>
을 포함합니다. InstallmentDetailsViewModel
에 대한 부분 뷰를 _InstallmentDetails.cshtml
으로 만들고 필요한 모든 작업을 수행했습니다.
_InstallmentDetails.cshtml
을 부분보기 (FounderInvestmentViewModel
)에 삽입하고 메인보기에 삽입하고 싶습니다.
첫째는 우리가 지금까지 사용했던 코드를 살펴 보자 : -
팸플릿보기 모델 : -
public class PropertyViewModel
{
public int? Id { get; set; }
public string PropertyTitle { get; set; }
....other attributes....
public List<FounderInvestmentViewModel> FounderInvestments { get; set; } = new List<FounderInvestmentViewModel>();
}
FounderInvestmentViewModel : -
public class FounderInvestmentViewModel
{
public int? Id { get; set; }
public int InvestorId { get; set; }
public double Investment { get; set; }
public int InstallmentPeriod { get; set; }
public IEnumerable<SelectListItem> FounderInvestorList { get; set; }
public List<InstallmentDetailsViewModel> InstallmentDetails { get; set; } = new List<InstallmentDetailsViewModel>();
}
InstallmentDetailsViewModel를 : -
public class InstallmentDetailsViewModel
{
public int? Id { get; set; }
[Display(Name = "Pay Date")]
public List<DateTime> PayDates { get; set; }
[Required]
public List<double> InstallmentAmounts { get; set; }
}
InstallmentDetails에 대한
PartialView (_InstallmentDetails.cshtml) : -
@model propertyMgmt.ViewModel.InstallmentDetailsViewModel
<div class="installmentDetails">
@using (Html.BeginCollectionItem("InstallmentDetails"))
{
@Html.HiddenFor(m => m.Id, new { @class = "id" })
<div class="form-group">
@Html.LabelFor(m => m.InstallmentAmounts, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(m => m.InstallmentAmounts, new { htmlAttributes = new { @class = "form-control", @type = "number" } })
@Html.ValidationMessageFor(m => m.InstallmentAmounts, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.PayDates, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(m => m.PayDates, new { htmlAttributes = new { @class = "form-control", @placeholder = "01/02/2017" } })
@Html.ValidationMessageFor(m => m.PayDates, "", new { @class = "text-danger" })
</div>
</div>
}
</div>
이 _InstallmentDetails.cshtml이 FounderInvestmentDetails보기 모델에 대한 PartialView 인이 _FounderInvestmentDetails.cshtml에 삽입 : -
@model propertyMgmt.ViewModel.FounderInvestmentViewModel
<div class="founderInvestmentDetails">
@using (Html.BeginCollectionItem("FounderInvestments"))
{
@Html.HiddenFor(m => m.Id, new { @class = "id" })
<div class="form-group">
@Html.LabelFor(m => m.InvestorId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.InvestorId, Model.FounderInvestorList, "Select Investor", htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.InvestorId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Investment, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(m => m.Investment, new { htmlAttributes = new { @class = "form-control", @type = "number" } })
@Html.ValidationMessageFor(m => m.Investment, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.InstallmentPeriod, htmlAttributes: new { @class = "control-label col-md-2", @type = "number" })
<div class="col-md-10">
@Html.EditorFor(m => m.InstallmentPeriod, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(m => m.InstallmentPeriod, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group" id="installmentDetailsDiv">
@foreach (var InstallmentDetails in Model.InstallmentDetails)
{
@Html.Partial("_InstallmentDetails", InstallmentDetails)
}
</div>
<div class="form-group col-md-10">
<input type="button" class="btn btn-info btn-xs" value="Add Installment Details" onclick="addInstallmentDetails()" />
</div>
}
</div>
이가 메인입니다 보기 만들기 : -
이것은 내 JS 코드의 기본보기입니다. -
function addFounderInvestors() {
var url = '@Url.Action("FounderInvestmentDetails")';
var form = $('form');
var founders = $('#founderInvestmentDetails');
$.get(url, function (response) {
founders.append(response);
// Reparse the validator for client side validation
form.data('validator', null);
$.validator.unobtrusive.parse(form);
});
};
function addInstallmentDetails() {
var url = '@Url.Action("InstallmentDetails")';
var form = $('form');
var installments = $('#installmentDetailsDiv');
$.get(url, function (response) {
installments.append(response);
// Reparse the validator for client side validation
form.data('validator', null);
$.validator.unobtrusive.parse(form);
});
};
컨트롤러 코드 : -
public PartialViewResult FounderInvestmentDetails()
{
var model = new FounderInvestmentViewModel {
FounderInvestorList = _investorQueryProcessor.GetInvestorByType(1).Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.InvestorName
})
};
//return PartialView(model);
return PartialView("_FounderInvestmentDetails", model);
}
public PartialViewResult InstallmentDetails()
{
return PartialView("_InstallmentDetails",new InstallmentDetailsViewModel());
}
public ActionResult Create()
{
if (Session["AdminName"] != null)
{
//ViewBag.Investors = SelectListItems;
List<FounderInvestmentViewModel> model = new List<FounderInvestmentViewModel>();
List<InstallmentDetailsViewModel> model2 = new List<InstallmentDetailsViewModel>();
return View(new PropertyViewModel());
}
else return Redirect("/Account/Login");
}
편집 : - 이 예외를 던지고 무엇 죄송합니다 - >>Collection.cshtml
PROCESS : - 메인 뷰에서 "설립자 투자자 버튼 추가" 클릭 이벤트는 부분보기 _FounderInvestmentDetails.cshtml
을 성공적으로 추가합니다. 이제 "추가 정보 추가"버튼이 추가됩니다.이 "추가 정보 추가"버튼을 클릭하면 _InstallmentDetails.cshtml
부분보기가 추가되어야하지만이 부분은 작동하지 않습니다. 나는이 버튼을 클릭하면, 나는 다음과 같은 코드에서 오류 "Object reference not set to an instance of an object"
을 얻을 : -
@using HtmlHelpers.BeginCollectionItem
<ul>
@foreach (object item in Model)-->>ERROR CODE
{
<li>
@using (Html.BeginCollectionItem(Html.ViewData.TemplateInfo.HtmlFieldPrefix))
{
@Html.EditorFor(_ => item, null, "")
}
</li>
}
</ul>
[NullReferenceException이 무엇인가, 나는 그것을 해결 어떻게?] (의 가능한 중복 https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do- i-fix-it) –
'propertyMgmt.ViewModel.FounderInvestmentViewModel' 모델은 NULL입니다. 그것이 NRE를받는 이유입니다. –
@CamiloTerevinto 해당 뷰 모델이 null 인 경우 왜 첫 번째 부분보기가 기본보기에 추가됩니까? – SudeepS