2014-04-01 73 views
0

我想從我的觀點的內部實例化一個對象內部的對象:實例化的視圖

在我的模型我有了它內部的一個屬性對象調用上市實體對象:

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; 
    ... 


} 

我意識到這可能是一個福利局問題,但我不能似乎在任何地方找到答案,所以我不想再浪費時間,想我會問。

+0

爲什麼你想初始化View中的模型屬性?它是控制器向View提供所需數據的工作。視圖應該呈現它。當您需要模型中未綁定的數據時,可能會有異常。在這種情況下,您可以使用ViewBag或ViewData來獲取視圖中的數據。 – Nilesh

回答

3

你的控制器應該提供一個模型來表示視圖所需的數據。如果視圖需要該模型中填充的屬性,則控制器負責執行此操作。該視圖應該使用該模型,而不是構建它。

要添加剃刀代碼中的任意塊查看您可以這樣做:

@{ 
    // ... 
} 

在這種情況下,也許這樣的事情是適當的:

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

好吧,這是公平的,但這是對這個特定模型的創造性看法,我現在無法改變。 –

+0

如果可能,您應該更改操作。我不確定爲什麼你能夠改變視圖而不是動作,但我已經添加了一些代碼片段給我的答案,可能是有用的。 – jmcilhinney

+0

謝謝jmcilhinney ......那很有用...... –