当前位置: 首页 > 知识库问答 >
问题:

非静态方法需要目标

毛勇
2023-03-14

我有一个控制器操作,它在Firefox本地和生产环境中都能正常工作,在IE本地工作,但在生产环境中不能正常工作。以下是我的控制器操作:

public ActionResult MNPurchase()
{
    CalculationViewModel calculationViewModel = (CalculationViewModel)TempData["calculationViewModel"];

    decimal OP = landTitleUnitOfWork.Sales.Find()
        .Where(x => x.Min >= calculationViewModel.SalesPrice)
        .FirstOrDefault()
        .OP;

    decimal MP = landTitleUnitOfWork.Sales.Find()
        .Where(x => x.Min >= calculationViewModel.MortgageAmount)
        .FirstOrDefault()
        .MP;

    calculationViewModel.LoanAmount = (OP + 100) - MP;
    calculationViewModel.LendersTitleInsurance = (calculationViewModel.LoanAmount + 850);

    return View(calculationViewModel);
}

这是我在IE中得到的堆栈跟踪:

错误。处理您的请求时出错。系统。非静态方法需要一个目标。at系统。系统上的reflection . runtimemethodinfo . check consistency(对象目标)。reflection . runtimemethodinfo . invokeagumentscheck(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture) at System。reflection . runtimemethodinfo . invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture)。系统中的reflection . runtimepropertyinfo . getvalue(Object obj,Object[] index)。data . objects . elinq . query parameter expression . trygetfieldorpropertyvalue(member expression me,对象实例,对象

共有3个答案

慕容博涛
2023-03-14

我发现这个问题在实体框架中很普遍,当我们手动实例化一个实体,而不是通过DBContext来解析所有的导航属性。如果表之间有外键引用(导航属性),并且您在lambda中使用这些引用(例如,ProductDetail。ID ),那么如果您手工创建了该实体,“Products”上下文仍然为空。

左丘曦
2023-03-14

通常,当目标为空时会发生这种情况。所以最好先检查调用目标,然后执行linq查询。

闻深
2023-03-14

我认为当您在运行时使用作为空引用的 lambda 变量时,会发生这种令人困惑的异常。在您的情况下,我会检查您的变量计算视图模型是否为空引用。

类似的东西:

public ActionResult MNPurchase()
{
    CalculationViewModel calculationViewModel = (CalculationViewModel)TempData["calculationViewModel"];

    if (calculationViewModel != null)
    {
        decimal OP = landTitleUnitOfWork.Sales.Find()
            .Where(x => x.Min >= calculationViewModel.SalesPrice)
            .FirstOrDefault()
            .OP;

        decimal MP = landTitleUnitOfWork.Sales.Find()
            .Where(x => x.Min >= calculationViewModel.MortgageAmount)
            .FirstOrDefault()
            .MP;

        calculationViewModel.LoanAmount = (OP + 100) - MP;
        calculationViewModel.LendersTitleInsurance = (calculationViewModel.LoanAmount + 850);

        return View(calculationViewModel);
    }
    else
    {
        // Do something else...
    }
}
 类似资料:
  • 问题内容: 到目前为止,我有以下代码: } 当我尝试在末尾设置double 时,出现错误消息“无法对非静态方法进行静态引用”。它说解决方法是也使该方法静态化,但是我的教授告诉我不要将该字段静态化。有一个简单的解决方案我只是想念吗? 问题答案: 静态方法属于该类,非静态方法属于该类的 实例 。 当您从呼叫时,您会收到错误消息,因为它与任何实例都没有关联。 您需要创建该类的实例: 然后,您可以调用实例

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。

  • 考虑: 为什么会出现这个错误? 非静态字段、方法或属性“WindowsApplication1.Form1.SetTextBoxText(int)”需要对象引用

  • 问题内容: 尝试在静态类中调用非静态方法时遇到错误。 无法从类型播放中静态引用非静态方法methodName() 我不能使该方法静态,因为这也给我一个错误。 此静态方法无法从xInterface隐藏实例方法 有什么办法可以在另一个静态方法中轮回调用非静态方法?(这两种方法位于单独的包和单独的类中)。 问题答案: 从静态方法中调用非静态方法的唯一方法是使类的实例包含非静态方法。根据定义,非静态方法是

  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码: