实例化视图内的对象

时间:2014-04-01 02:37:37

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

我试图从我的视图中实例化一个对象:

在我的模型中,我有一个名为Listing的实体对象,其中包含一个Property对象:

public class Listing
{
    ...

    public Property ListingProperty { get; set; }

    ...
}

在我的观点中,我引用了列表模型:

@model Realintory.Models.Listing

...

在此视图中的表单内部,我正在尝试设置"属性"的属性。像这样的对象:

<div class="form-group">
    @Html.LabelFor(model => model.ListingProperty.Address, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.ListingProperty.Address)
        @Html.ValidationMessageFor(model => model.ListingProperty.Address)
    </div>
</div>

这会引发空值异常,因为它尚未实例化。我的问题是如何设置它,我知道这一定很容易,但无论我尝试什么,它都不在视图方面工作。

这样的事情很糟糕:

@using (Html.BeginForm()) 
{
   @Html.AntiForgeryToken()
   Property toCreate = new Property();
   @Model.ListingProperty = toCreate;
   ...


}

我意识到这可能是一个新问题,但我似乎无法在任何地方找到答案,所以我不想再浪费时间并想出我会问。

1 个答案:

答案 0 :(得分:3)

您的控制器应该提供表示视图所需数据的模型。如果视图需要在模型中填充该属性,则控制器负责执行该操作。视图应该使用模型,而不是构建它。

要在Razor视图中添加任意代码块,您可以执行以下操作:

@{
    // ...
}

在这种情况下,也许这样的事情是恰当的:

@if (Model.ListingProperty == null)
{
    Model.ListingProperty = new Property();
}