C# 从下拉列表中选择的值

C# 从下拉列表中选择的值,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我试图从从从数据库填充的dropdownlist中获取所选值。列表填充良好,允许我选择一个值,但当我单击submit按钮时,我得到一个错误,列表“未设置为对象的实例” 以下是我的看法: @model LoanRequestRowViewModel <h2>CreateTest</h2> <div> @using (@Html.BeginForm()) { <div> <span cla

我试图从从从数据库填充的dropdownlist中获取所选值。列表填充良好,允许我选择一个值,但当我单击submit按钮时,我得到一个错误,列表“未设置为对象的实例”

以下是我的看法:

@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>
@model LoanRequestRowViewModel
创建测试
@使用(@Html.BeginForm())
{
@LabelFor(model=>model.LoanPurpose)
@Html.DropDownListFor(model=>model.LoanPurposeId,model.LoanPurpose)
@LabelFor(model=>model.amonRequested)
@Html.TextBoxFor(model=>model.amonRequested)
@LabelFor(model=>model.RequestedRate,新的{@class=“control label”})
@TextBoxFor(model=>model.RequestedRate,新的{@class=“inputROW”})
}
这是我的控制器:

 [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();
        }
[HttpGet]
[路由(“创建测试”)]
公共异步任务CreateTest()
{
var loanPurposes=等待GetLoanPurposes();
var模型=新的LoanRequestRowViewModel();
model.LoanPurpose.Add(新建SelectListItem{Text=“-Please Select-”,Value=“-1”});
foreach(贷款目的的var)
{
model.LoanPurpose.Add(新建SelectListItem()
{
Value=purpose.Value.ToString(),
Text=purpose.Text.ToString()
});
}
返回视图(模型);
}
[HttpPost]
[路由(“创建测试”)]
公共异步任务CreateTest(LoanRequestRowViewModel模型)
{
var newLoan=newloanrequest()
{
AmountRequested=模型。AmountRequested,
LoanPurposeId=model.LoanPurposeId
};
返回视图();
}
模型如下:

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; }
公共类LoanRequestRowViewModel
{
公共贷款RequestRowViewModel()
{
LoanClasses=新列表();
LoanTypes=新列表();
LoanPurpose=新列表();
RateIndex=新列表();
PaymentPeriod=新列表();
PaymentType=新列表();
}
公共Guid Id{get;set;}
公共Guid LoanApplicationId{get;set;}
公共Guid LoanPurposeId{get;set;}
公共Guid LoanClassId{get;set;}
[显示(Name=“贷款类别”)]
公共IList LoanClasses{get;set;}
公共字符串SelectedLoanClass{get;set;}
[显示(Name=“贷款用途”)]
公共IList LoanPurpose{get;set;}
公共字符串SelectedLoanPurpose{get;set;}
[显示(Name=“请求的金额”)]
公共十进制数?AmountRequested{get;set;}
[显示(Name=“请求的费率”)]
公共十进制?RequestedRate{get;set;}
[显示(Name=“贷款类型”)]
公共IList LoanTypes{get;set;}
公共字符串SelectedLoanType{get;set;}
[显示(Name=“费率指数”)]
公共IList RateIndex{get;set;}
公共Guid SelectedRateIndex{get;set;}
[显示(Name=“发起费”)]
公共十进制?OriginationFeePercentage{get;set;}
[显示(Name=“可变利率保证金”)]
公共十进制?VariableRateMargin{get;set;}
[显示(Name=“可变费率下限”)]
公共十进制?VariableRateFloor{get;set;}
[显示(Name=“可变利率上限”)]
公共十进制?VariableRate天花板{get;set;}
[显示(Name=“付款类型”)]
公共IList PaymentType{get;set;}
公共字符串SelectedPaymentType{get;set;}
[显示(Name=“付款期”)]
公共IList PaymentPeriod{get;set;}
public int?SelectedPaymentPeriod{get;set;}
[显示(名称=“付款数量”)]
公共int?NumberOfPayments{get;set;}
[显示(名称=“摊销期限”)]
公共十进制?摊销期限{get;set;}

非常感谢您的帮助!

在您的视图中,您希望看到一个包含信息的viewmodel,但是您没有返回任何信息到视图中

@Html.DropDownListFor(model => model.LoanPurposeId, Model.LoanPurpose)
要求提供贷款用途的填写清单

但由于该模型为空,它只是崩溃了

要解决此问题,需要传递模型的一个新实例:LoanRequestRowViewModel


另外,我会考虑重命名:Model.LoanPurpose。我觉得它只返回一个属性,而不是一个项目列表。

你能发布你的模型和你得到错误的属性吗?你能在视图中看到错误吗?在你的post方法中,你再次返回视图,而没有传递模型实例(因此模型实例将为空)@DanielJ.G.是正确的。这是视图中的问题。请将模型传递给视图。我刚刚返回了视图()因此,代码将被编译。它从未命中该行,因为一旦单击submit按钮,它就会在视图中的dropdownlist上抛出错误。我无法重命名任何模型,无论如何,我感谢您的帮助。问题是LoanPurposeId是一个Guid。我使用了“SelectedPurposeId”这是一个字符串,现在一切都正常了。想想看。