2015-11-03 40 views
0

如何在模型中投射模型時如何正確綁定到模型?輸入名稱會是什麼樣子?MVC在編輯器中扮演

所以我有點複雜Model,其中一個屬性是一個類,例如其他類別擴展的Shape和。 所以我有麻煩試圖綁定到ModelShape屬性時:在POST要求

@Html.RadioButtonFor(m => (m.Shape as Square).Something, "Yes") 
@Html.RadioButtonFor(m => (m.Shape as Square).Something, "No") 

Shape屬性顯示爲模型null

有人請讓我在正確的方向推動?什麼是輸入的表單收集鍵應該看起來像?

+0

您不能將一個單選按鈕(或任何html表單控件)綁定到一個複雜對象('Shape'或'Square')。您需要綁定到「Shape」或「Square」屬性(例如'string')。你究竟想要做什麼? –

+0

@StephenMuecke我綁定到該對象的屬性。 – sparta223

+0

那麼演員的目的是什麼?這沒有任何意義(html沒有關於你使用什麼類型的概念 - 你可以生成的所有類型都是')。 –

回答

1

MVC與這些lambda表達式一起工作的方式有點奇怪,它實際上從不以任何方式運行或以任何方式使用lambda函數。相反,它將其分解爲表達式組件,並選擇參數名稱(並且爲getter/setter等設置MethodInfo)以用於數據綁定。

不幸的是,你的複雜表達式打破了他們的算法。這很好,它意味着快速,而不是非常靈活。

至於一個修復,我會做的只是添加一個Square屬性(public Square SquareAccessor => Shape as Square;)並綁定到那。我假設你假設演員陣容是有效的,如果你到達那個分支,如果不是拋出一些null檢查。

+0

對不起,你的意思是在模型中添加一個單獨的Square屬性? – sparta223

+0

是的,確切地說。只是爲了使綁定表達式匹配預期的格式。 – Blindy

+0

是唯一的方法呢?沒有可以整合的解決方法,仍然可以進行鑄造? – sparta223

1

我對找到的唯一解決方法是將其轉換視圖變量,它的名字是你所需要的東西是在「名稱」屬性

@{ 
    var Shape = Model.Shape as Square; 
} 
@Html.RadioButtonFor(m => Shape.Something, "Yes") 
@Html.RadioButtonFor(m => Shape.Something, "No") 

這樣的HTML將正確地呈現,但仍這是解決方法 - 不是一個乾淨的解決方案