Asp.net mvc 在ASP.NET MVC中使用带有PartialView的ViewModel
我试图将PartialView与ViewModel一起使用,但我得到了错误 传递到字典中的模型项的类型为“Regression”,但此字典需要类型为“RegressionVM”的模型项 控制器:Asp.net mvc 在ASP.NET MVC中使用带有PartialView的ViewModel,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我试图将PartialView与ViewModel一起使用,但我得到了错误 传递到字典中的模型项的类型为“Regression”,但此字典需要类型为“RegressionVM”的模型项 控制器: public ActionResult _Regression(Regression regression) { var model = new ViewModels.RegressionVM(regression); return Pa
public ActionResult _Regression(Regression regression)
{
var model = new ViewModels.RegressionVM(regression);
return PartialView(model);
}
局部视图
@model ViewModels.RegressionVM
<div>
<p>Correlation Coefficient : @Model.Regression.CorrelationCoefficient</p>
</div>
我已经检查了传递给部分控制器的对象是否为null,并且类型是否正确。
如果在控制器中,我只是简单地接受一个类型回归,并将其传递给PartialView,该视图工作正常,但每当使用视图模型模式时,我都会出错
有趣的是,如果我从局部控制器中省略viewmodel,如下所示,错误就会消失(显然,我将局部视图更改为接受@model回归):
我正在使用ASP.NET MVC 4您需要更改此设置
@Html.Partial("_Regression", SectorAnalysis.evReg)
对此
@Html.Action("_Regression", "ControllerName", SectorAnalysis.evReg)
理由:
Html.Partial
不调用控制器操作,它只是尝试使用您发送的模型呈现局部视图。在本例中,您正在将类型为Regression
的模型发送到需要模型类型为ViewModels.RegressionVM
的局部视图。通过调用Html.Action()
,您正在指示razor视图引擎在控制器中执行操作,该操作接受回归
类型对象,并将视图模型.回归VM
返回到部分视图。主视图中的模型是什么(我假设它是@model回归
)?该错误意味着SectorAnalysis.evReg
为null
,因此@Html.Partial()
方法在主视图中使用该模型。你做什么有点不清楚,因为你没有提供足够的信息。例如,您在哪里调用\u Regression()
?什么是SectorAnalysis.evReg
?它是一个静态字段还是模型的一部分?@Stephen我假设主模型视图是不相关的(它是另一个viewmodel)。回归实际上是一个类而不是一个方法。我在调试器中检查evReg是否属于正确的类且不为null。我通过展示什么起作用(即不在控制器中使用viewmodel)使问题更清楚一些。我知道回归是一个类:)。我指的是\u Regression()
(控制器方法)在看到您的编辑后,我假设SectorAnalysis.evReg
是回归的类型(而不是它需要的回归VM
)@Html.Partial()
不调用服务器方法并执行\u Regression()
方法中的代码-它只是呈现部分。如果evReg
是Regression
的类型,那么您需要使用@Html.Action(“\u Regression”,SectorAnalysis.evReg)
@Html.Partial("_Regression", SectorAnalysis.evReg)
@Html.Action("_Regression", "ControllerName", SectorAnalysis.evReg)