我有一個局部視圖,有時需要收集數據,有時只需要顯示保存的數據並且不允許編輯。創建一個包含元素,其屬性可以影響子元素的呈現方式
我想爲這兩種需求使用相同的局部視圖,因爲格式很複雜。但是,我不想僅將「禁用」標記應用於特定控件:我希望(在服務器端)將只讀數據呈現爲文本而不是控件,以便它不能被回發。
(徵求意見,使事情複雜化,有一個字段,可編輯,即使是隻讀的所有其他領域,所以會有一個回)。
我正在考慮這個問題的一般解決方案。做最簡單的事情將是下面的代碼模式適用於所有領域:
@{ if(condition) {
@Html.TextBoxFor(model=>model.Field)
}
else
{
@Html.DisplayFor(model=>model.Field)
}
}
但是,這是不雅的,並可能導致難以閱讀的代碼。而且,由於模式必須手動應用,因此很容易出錯。
我正在寫一些擴展方法來補充TextBoxFor等,它將採用一個額外的參數來指示是否調用TextBoxFor或DisplayFor。
但我希望更好的是我可以設置一個包含的元素,它會自動影響子元素的呈現方式,您可以在ASP.NET WebForms Panel控件上設置Visible屬性的方式。
所以現在我正在走進假設領域。爲了實現這樣的事情,我需要一個包含服務器端的元素(可能遵循與BeginForm相同的模式),它已經意識到它自己的範圍,並且可能會影響包含渲染擴展調用的方式。
這樣的事情甚至可能嗎?
爲什麼不只是創建兩個單獨的視圖? – 2012-01-11 21:29:08
@Shark因爲視圖足夠複雜,格式足夠複雜,所以我不想創建兩件必須保持同步的東西。但是,謝謝你:一般來說這可能是最好的解決方案。 – 2012-01-13 16:30:19