当模型为空时,ASP.NET MVC运行时编译器抱怨错误的模型类型

时间:2014-04-30 13:16:46

标签: asp.net-mvc asp.net-mvc-4

当ASP.NET MVC 4 Partial Views的模型为null时,我遇到了一个奇怪的问题。当model不为null时,一切正常。运行时编译器警告是

  

传递到字典中的模型项的类型为' LoyalisticSuite.Models.SignUpStartInfo',但此字典需要类型为' LoyalisticSuite.Code.CustomerInfo'的模型项。

在我的布局页面上,我将其称为:

@Html.Partial("_TelephoneNotification", Session["Customer"])

其中Session [" Customer"]确实是CustomerInfo的类型。视图声明如下:

@using MVC.Common.Extensions
@model LoyalisticSuite.Code.CustomerInfo

@if (Model != null && string.IsNullOrWhiteSpace(Model.Telephone) && Model.Owner != null && Model.Owner.Value == (Guid)Membership.GetUser().ProviderUserKey)
{
    <div id="customerInfoNotification" class="privacy-policy-notification" style="display: none;">
        ... cut off some markup ...
    </div>
}

为什么运行时编译器将null解释为某种随机类型,这里是&#39; LoyalisticSuite.Models.SignUpStartInfo&#39;?一切都适用于非null值。有什么问题,我该如何解决?还有其他人遇到过这个问题吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我最终创建了一个以下简单的包装结构:

public struct Single<T>
{
    public Single(object value) : this()
    {
        Value = (T) value;
    }

    public T Value { get; set; }
}

现在,我可以传递该值而无需处理空值,如下所示:

@Html.Partial("_TelephoneNotification", new Single<CustomerInfo>(Session["Customer"]))

并将部分视图模型声明为:

@model MVC.Common.Single<LoyalisticSuite.Code.CustomerInfo>
@if (Model.Value != null && string.IsNullOrWhiteSpace(Model.Value.Telephone) && Model.Value.Owner != null && Model.Value.Owner.Value == (Guid)Membership.GetUser().ProviderUserKey)
{
    ...
}