我對如何實現EditorForModel有點困惑。我得到了在Views \ Shared \ EditorTemplates中設置模板的想法,但我認爲我已經過度研究(如果可能的話),這導致了我的困惑。使用多種類型的模型並創建不同的EditorForModel模板
基本上,我試圖儘量減少代碼複製。我爲客戶提供了5項服務,每項服務都有4至6種不同的解決方案。使事情變得更加複雜,在某種程度上可以在許多解決方案中共享某些類型。
爲了使這個簡單,採取類型:
public string FirstName { get; set; }
我會在每個解決方案使用這個(和上升中的每一個服務的「樹」)。但很明顯,我有許多其他類型的解決方案,或者在幾個解決方案之間共享,或者根本沒有。
比方說,我有100種類型的每個服務。我可以將它們分開爲不同的查看模型,但是我必須將這5個服務分解。我寧願將它們全部保存在一個View Model,每個服務中。
我嘗試創建模板時遇到了麻煩。我想使用模板,因爲我使用的是嚮導,我不想在特定的解決方案中爲嚮導的每個部分重新創建視圖,特別是如果它是相同的「數據」(並且再次考慮因素我擁有的解決方案數量)。
因此,我創建了一個BasicDetails.cshtml視圖(帶有名字,姓氏和電子郵件等類型),它可以在所有解決方案中實際使用。一個編輯器模板在這裏看起來很理想,但是我的困惑產生了,因爲如果我使用ServiceViewModelOne.cs並執行@ Html.EditorForModel(),我要麼吐出所有100種類型,要麼使用模板只吐出我想要的內容BasicDetails.cshtml,在\ Views \ Shared \ EditorTemplates \ ServiceViewModelOne.cshtml中創建一個模板。
現在,我將能夠,例如,請執行下列操作:
@Html.EditorForModel("BasicDetails")
@Html.EditorForModel("WizardStep2")
@Html.EditorForModel("WizardStep3")
因爲我想讓(和但更多的我想作)每個自定義模板,使用相同的ServiceViewModelOne的.cs?如果我是正確的,我會再有以下文件夾結構:
- \查看\共享\ EditorTemplates \ BasicDetails.cshtml
- \查看\共享\ EditorTemplates \ WizardStep2.cshtml
- \查看\共享\ EditorTemplates \ WizardStep3.cshtml
- ...
顯然,每個模板中我會有相應的
<div class="editor-label">
@Html.LabelFor(m => m.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
</div>
...
所有的HTML輸入特定向導中的步驟(包括整個HTML佈局)
這會是一種適當的方式做我想做的,還是我找錯了樹?
更新: 我想過使用UIHint,但我不確定它是否會完全工作。
我可以在模型層使用UIHint:
[UIHint("BasicDetails")]
public class MyModel {}
或在類型級別
public class MyModel
{
[UIHint("FirstName")]
public string FirstName { get; set; }
}
而且我可以在那裏創建一個MyModel.cs,然後自動映射的一些類型到MyViewModelOne.cs,MyViewModelTwo.cs等。
不過,我想我會結束自己的拳擊,可以這麼說。
比方說,我有Type1,Type2,Type3,Type4。 Type1可以用於每個解決方案(保持簡單,可以說有4個解決方案)。 Type2和Type3可以用於一種解決方案,但不能用於其他解決方案。並且可以說在另一個解決方案中,我可以使用Type2和Type4。
使用UIHint或automapping意味着我將不得不創建3個不同的東西來解決上述問題,以及如果我需要在另一個解決方案中使用Type3和Type4會怎樣。
我可能脫離基地,但它似乎限制迫使我創造多個排列,這正是我希望避免的。
我會承認沒有使用過AutoMapper,並且正在研究是否有幫助。
你絕對明白我的困境。我已更新我的問題,以考慮您的迴應。 – REMESQ 2012-02-06 20:47:27
@REMESQ - 聽起來像你已經按照你的編輯外觀排序了。我很高興,因爲它變得更加混亂。 :) – RPM1984 2012-02-07 02:20:36