【问题标题】:ASP.Net MVC 3 Razor View Accept Null ObjectASP.Net MVC 3 Razor 视图接受空对象
【发布时间】:2012-08-04 06:23:12
【问题描述】:

我正在开发一个 ASP.Net MVC 3 Web 应用程序。我有一个视图模型

public class ViewModelFormPreview
{
    public FormPersonal PersonDetails { get; set; }
    public IList<FormEmployment> Employment { get; set; }
    public FormMembership Membership { get; set; }
}

还有一个接受这个 ViewModel 的 Razor 视图

@model Locum.UI.ViewModels.ViewModelFormPreview

<h1 class="sepH_b">Application Preview</h1>

  @Html.Partial("FormPreviewApplication/PersonalDetails", Model.PersonDetails)

  @Html.Partial("FormPreviewApplication/Employment", Model.Employment)

  @Html.Partial("FormPreviewApplication/MembershipDetails", Model.Membership)   

视图的最后一部分是我的问题发生的地方。

如果 Model.Memebership != null 则接受 FormMembership 类型的 Object 的 Partial View 工作得很好。但是,如果 Model.Memebership 为 NULL,我会收到如下错误

传入字典的模型项是类型 'Locum.UI.ViewModels.ViewModelFormPreview',但是这本字典 需要“Locum.POCO.FormMembership

类型的模型项

这是一个奇怪的错误,因为即使 Model.Memebership 为 NULL,它仍然是 FormMembership 类型。那么,当 Object 为 NULL 时,为什么错误指出我试图传入 ViewModelFormPreview

有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 razor viewmodel partial-views


    【解决方案1】:

    正如消息所说,它是 NULL 而不是 EMPTY。 如果您尝试使用 Membership.MyFiels,且成员资格为 null,您总是会收到错误消息。

    要解决您的问题,只需初始化您的类,在 NULL 的情况下使用默认值,或使用 IF 来检查它是否为 NULL

    类似的东西。

    @if (Model,Membership!=null) {
      @Html.Partial("FormPreviewApplication/MembershipDetails", Model.Membership) 
    }
    else
    {
      @Html.Partial("FormPreviewApplication/MembershipDetails", new FormMembership())     
    }
    

    【讨论】:

    • 虽然这可行,但它会将逻辑放入您应该避免的视图中。 IMO 最好为您的 ViewModel 提供一个无参数的构造函数,默认情况下定义每个参数的新实例。无论如何都要为修复+1。
    • @RoryMcCrossan 公平点罗里。我也可能会考虑这个选项。干杯。
    • 我同意,我回答的第一部分就是这个意思。将初始化代码放在 ViewModel 的 ctor 或控制器中由您决定。就我个人而言,我更喜欢将 ViewModel 用作纯 DTO,但通常只是个人喜好问题 :)
    【解决方案2】:

    您能否创建一个新的空 Membership 类实例并传递给 partial 以避免此错误

    【讨论】:

    • 我可以,但我正在寻找另一种解决方案。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多