RenderPartial,使用模型作为参数

3
我遇到了类型错误,但我不明白为什么。我有一个View、一个ViewModel、一个PartialView和一个Model。
视图gift的model是giftViewModel。giftViewModel包含一个Model LoginModel(login)的实例。
PartialView LoginPopUp以LoginModel作为model参数。我试图在gift视图中呈现PartialView LoginPopUp,并将login作为model参数传递给它。
然后我收到了以下错误信息:
The model item passed into the dictionary is of type 'GiftViewModel', but this dictionary requires a model item of type 'LoginModel'.

以下是代码:

GiftViewModel.cs

    public class GiftViewModel
{

    public LoginModel login { get; set; }
    [...]
}

Gift/Index.cshtml

@model GiftViewModel

@section content{

  @{Html.RenderPartial("LoginPopUp", Model.login);}
}

LoginPupUp.cshtml

@model LoginModel
[...]

我真的不明白我哪里出错了...

1
请确保在 @{Html.RenderPartial("LoginPopUp", Model.login);}Model.login != null - Zabavsky
谢谢,确实是这个问题!为了辩护自己,错误信息非常令人困惑。 - Cactus
1个回答

2

您应该检查代码中的 Model.login != null 这一行。

@{Html.RenderPartial("LoginPopUp", Model.login);}

如果相等,框架将会把模型从父视图传递给LoginPopUp,该视图的类型为GiftViewModel。这就是为什么你会遇到这个错误,因为这个部分视图需要一个类型为LoginModel的模型项。

所以要么在控制器中初始化login属性,要么做一些类似的操作:

@{Html.RenderPartial("LoginPopUp", Model.login ?? new LoginModel());}

我通常在模型的构造函数中初始化这样的“子”模型,以避免出现此类错误和“NullReferenceException”。 - Henk Mollema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接