C# foreach(var item=>model.xxxx)空异常

C# foreach(var item=>model.xxxx)空异常,c#,razor,foreach,C#,Razor,Foreach,我已经通过了很多职位,但无法解决这个问题 我在视图上输入一些值,然后单击Submit按钮 我的回购协议根据标准计算付款计划,并显示我正试图实现的列表 这就是我遇到问题的地方。 在初始加载时,我的模型为null,我得到null引用异常 我刚刚开始使用asp进行编码,所以请忽略本例中的基本内容。 任何建议都会有帮助 @模型FinanceApplication.ViewModels.LoanView模型 @使用Html.BeginFormIndex、Home、FormMethod.Post { 输入价

我已经通过了很多职位,但无法解决这个问题

我在视图上输入一些值,然后单击Submit按钮 我的回购协议根据标准计算付款计划,并显示我正试图实现的列表 这就是我遇到问题的地方。 在初始加载时,我的模型为null,我得到null引用异常

我刚刚开始使用asp进行编码,所以请忽略本例中的基本内容。 任何建议都会有帮助

@模型FinanceApplication.ViewModels.LoanView模型 @使用Html.BeginFormIndex、Home、FormMethod.Post { 输入价格 @Html.TextBoxFormodel=>model.Amount 输入存款 @Html.TextBoxFormodel=>model.Deposit 融资选择权 @Html.DropDownListFormodel=> model.Term,新建SelectListNum.GetValuesTypeopOptions, 选择选项, 新建{@class=form control} 交货日期 @Html.EditorFormodel=>model.Deliverydate 安排费 @Html.TextBoxFormodel=>model.ArrangementFee 竣工费 @Html.TextBoxFormodel=>model.CompletionFee 付款时间表 金额 @Html.DisplayFormodel=>model.Amount 贷款金额: @Html.DisplayFormodel=>model.LoanAmount 存款 @Html.DisplayFormodel=>model.Deposit 学期 @Html.DisplayFormodel=>model.Term 交货日期 @Html.DisplayFormodel=>model.Deliverydate 付款日期 付款金额: 支付的总金额: 余额 ifModel!=null { @Model.PaymentSchedule中的每个var项目 { @Html.DisplayFormodelItem=> 项目.付款日期 @Html.DisplayFormodelItem=> 项目.付款金额 @Html.DisplayFormodelItem=> 项目.已支付总额 @Html.DisplayFormodelItem=> 项目.剩余余额 } } 其他的 { 没有找到任何项目 } }
对于十进制值,可以使用??运算符,对于可以使用三元运算符的日期:

. . .
<td>@Html.DisplayFor((modelItem => (item.PaymentDate == null ? new DateTime(1900,1,1):item.PaymentDate)))</td> 
<td>@Html.DisplayFor(modelItem => item.PaymentAmount ?? 0)</td>
. . . 
有关更多信息,请参阅


否则,如果问题是第一次调用,则未定义模型,因此必须在模型构造函数中初始化参数

在初始加载时,视图模型返回null-hint

您应该有一个加载视图的方法,即get和发布视图的方法,即post

根据上下文,您需要在两种操作方法中使用模型


选中此项,并在初始加载时发布操作方法。

是否使用异步方法?一种可能性是异步方法在完全创建模型之前返回并给出错误然后是视图-我知道它没有模型…所以请求参数是空的?是的,作为它的初始加载,这就是它失败的地方,我会在
d使用调用堆栈找出没有请求参数的原因。调用方法应该设置参数。谢谢-相应地进行了更新,但是当索引返回没有实际模型的视图时,它会失败。谢谢-最初它是一个get-Index,这就是模型为null的地方,但是为什么我没有模型的问题请上传所有控制器代码。这将使帮助更容易。添加了整个控制器代码。谢谢您需要初始化模型中的参数。如果有一个属性期望get方法上有一个值,并且它被传递到视图中,那么它将返回null。当您单击post时,我希望这与您发布后返回get方法的行为相同。你能把整个例外信息都贴出来吗?如果你喜欢的话,请把我的答案投上去。
//ViewModel
public class LoanViewModel
{
    [Required(ErrorMessage = "Please enter the loan amount.")]
    [Range(1, 100000000, 
      ErrorMessage = "Loan amount must be between 1,000 and 1000,000.")]
    public decimal Amount { get; set; }

    [Required(ErrorMessage = "Please enter the deposit amount.")]
    [Remote(action: "VerifyDeposit", controller:"Home")]
    public decimal Deposit { get; set; }

    [Required(ErrorMessage = "Please select the term of the loan.")]
    public string Term { get; set; }

    [Required(ErrorMessage = "Please select the delivery date.")]
    [DataType(DataType.Date)]
    [Display(Name = "Delivery Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, 
      DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime Deliverydate { get; set; }

    public decimal ArrangementFee { get; set; }

    public decimal CompletionFee { get; set; }

    public decimal LoanAmount
    {
        get { return (Amount - Deposit); }
    }

    [Display(Name = "Payment Schedule")]
    public List<SheduledPayments> PaymentSchedule { get; set; }        
}

//PaymentSchedule
public class SheduledPayments 
{
    public DateTime PaymentDate { get; set; }
    public decimal PaymentAmount { get; set; }
    public decimal RemainingBalance { get; set; }
    public decimal TotalPaid { get; set; }
}
. . .
<td>@Html.DisplayFor((modelItem => (item.PaymentDate == null ? new DateTime(1900,1,1):item.PaymentDate)))</td> 
<td>@Html.DisplayFor(modelItem => item.PaymentAmount ?? 0)</td>
. . .