Выбранное значение из DropdownList

1

Я пытаюсь получить выбранное значение из выпадающего списка, который заполняется из базы данных. Список заполняется отлично и позволяет мне выбрать значение, но когда я нажимаю кнопку "Отправить", я получаю сообщение об ошибке, что список "не установлен в экземпляр объекта",

Вот мое мнение:

@model LoanRequestRowViewModel

<h2>CreateTest</h2>
<div>
    @using (@Html.BeginForm())
    {
        <div>
            <span class="inline-block">
                @Html.LabelFor(model => model.LoanPurpose)
                @Html.DropDownListFor(model => model.LoanPurposeId, Model.LoanPurpose)

            </span>

            <span class="inline-block">
                @Html.LabelFor(model => model.AmountRequested)
                @Html.TextBoxFor(model => model.AmountRequested)
            </span>
            <span class="inline-block">
                @Html.LabelFor(model => model.RequestedRate, new { @class = "control-label" })
                @Html.TextBoxFor(model => model.RequestedRate, new { @class = "inputROW" })
            </span>

        </div>
        <div>
            <input type="submit" value="Create" />
        </div>
    }
</div>

Вот мой контроллер:

 [HttpGet]
        [Route("CreateTest")]
        public async Task<ActionResult> CreateTest()
        {
            var loanPurposes = await GetLoanPurposes();


            var model = new LoanRequestRowViewModel();

            model.LoanPurpose.Add(new SelectListItem { Text = "-Please Select-", Value = "-1" });
            foreach (var purpose in loanPurposes)
            {
                model.LoanPurpose.Add(new SelectListItem()
                {
                    Value = purpose.Value.ToString(),
                    Text = purpose.Text.ToString()
                });
            }

            return View(model);
        }
        [HttpPost]
        [Route("CreateTest")]
        public async Task<ActionResult> CreateTest(LoanRequestRowViewModel model)
        {
            var newLoan = new LoanRequest()
            {
                AmountRequested = model.AmountRequested,
                LoanPurposeId = model.LoanPurposeId
            };

            return View();
        }

Вот модель:

public class LoanRequestRowViewModel
    {
        public LoanRequestRowViewModel()
        {
            LoanClasses = new List<SelectListItem>();
            LoanTypes = new List<SelectListItem>();
            LoanPurpose = new List<SelectListItem>();
            RateIndex = new List<SelectListItem>();
            PaymentPeriod = new List<SelectListItem>();
            PaymentType = new List<SelectListItem>();
        }

        public Guid Id { get; set; }

        public Guid LoanApplicationId { get; set; }

        public Guid LoanPurposeId { get; set; }
        public Guid LoanClassId { get; set; }
        [Display(Name = "Loan Class")]
        public IList<SelectListItem> LoanClasses { get; set; }

        public string SelectedLoanClass { get; set; }


        [Display(Name = "Loan Purpose")]
        public IList<SelectListItem> LoanPurpose { get; set; }


        public string SelectedLoanPurpose { get; set; }

        [Display(Name = "Amount Requested")]
        public decimal? AmountRequested { get; set; }

        [Display(Name = "Requested Rate")]
        public decimal? RequestedRate { get; set; }

        [Display(Name = "Loan Type")]
        public IList<SelectListItem> LoanTypes { get; set; }



        public string SelectedLoanType { get; set; }

        [Display(Name = "Rate Index")]
        public IList<SelectListItem> RateIndex { get; set; }

        public Guid SelectedRateIndex { get; set; }

        [Display(Name = "Origination Fee")]
        public decimal? OriginationFeePercentage { get; set; }

        [Display(Name = "Variable Rate Margin")]
        public decimal? VariableRateMargin { get; set; }

        [Display(Name = "Variable Rate Floor")]
        public decimal? VariableRateFloor { get; set; }

        [Display(Name = "Variable Rate Ceiling")]
        public decimal? VariableRateCeiling { get; set; }

        [Display(Name = "Payment Type")]
        public IList<SelectListItem> PaymentType { get; set; }


        public string SelectedPaymentType { get; set; }

        [Display(Name = "Payment Period")]
        public IList<SelectListItem> PaymentPeriod { get; set; }


        public int? SelectedPaymentPeriod { get; set; }

        [Display(Name = "Number of Payments")]
        public int? NumberOfPayments { get; set; }

        [Display(Name = "Amortization Term")]
        public decimal? AmortizationTerm { get; set; }

Любая помощь очень ценится!

  • 0
    Можете ли вы опубликовать свою модель и имущество, за которое вы получили ошибку?
  • 3
    Не могли бы вы иметь ошибку в представлении? В вашем методе post вы возвращаете View снова, не передавая экземпляр модели (таким образом, экземпляр модели будет нулевым)
Показать ещё 2 комментария
Теги:
razor
asp.net-mvc

1 ответ

0

На ваш взгляд вы ожидаете viewmodel с информацией, но вы не возвращаете ничего в представление.

@Html.DropDownListFor(model => model.LoanPurposeId, Model.LoanPurpose)

Просит заполнить список целей займа.

Но поскольку модель имеет значение null, она просто падает.

Чтобы решить эту проблему, вам необходимо передать новый экземпляр модели: LoanRequestRowViewModel

Также я бы подумал о переименовании: Model.LoanPurpose. Мне кажется, что он просто возвращает одно свойство, а не список элементов.

  • 0
    Я не могу переименовать ни одну из моделей, в любом случае, я ценю вашу помощь. Проблема заключалась в том, что LoanPurposeId является Guid. Я использовал «SelectedPurposeId», который является строкой, и теперь все работает отлично. Пойди разберись.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню