2017-03-31 79 views
2

我有以下視圖模型:呈現CSHTML編輯的視圖模型

public MyViewModel 
{ 
     prop string p1 {get;set;} 
     prop string p2 {get;set;} 
} 

在我的Razor視圖我想實現一個表單,允許這種模式的版本,這是我做了什麼:

@model MyViewModel 
@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(model => model.p1) 
    @Html.TextBoxFor(model => model.p2) 
} 

這是工作,但它是一個有點沉重,因爲我必須用新線每個I加入時間更新我的Razor視圖或刪除屬性到我的視圖模型。 不可能在一行中生成一個允許編輯所有viewmodel屬性的窗體。我想這兩個以下行,但它呈現什麼:

@model MyViewModel 
@Html.EditorForModel() //or @Html.EditorFor(model => model) 
+0

你想製作一個自定義的文本框嗎? –

回答

0

使用編輯器模板的整個整個的一點是可以自定義的東西如何出現。如果您只想致電Html.EditorForModel(),則可以在視圖中直接進行操作,而無需編輯器模板。

這是不是特別工作的原因是因爲你基本上有一個無限遞歸。 Html.EditorForModel()將利用編輯器模板(如果有的話)呈現模型的字段。從邏輯上講,你不能在實際的編輯器模板中調用它。

如果你想簡化事情,你應該在創建自定義編輯模板基本類型的工作:字符串,日期時間等,然後你可以調用像Html.EditorForModel(),它會使用渲染對模型所有產業領域這些屬性類型的編輯器模板。這樣,您就可以獲得自定義字段,而無需手動指定每個字段。爲複雜類型(如MyViewModel)創建編輯器模板的唯一原因是,如果您想在此處執行某些特定操作。否則,請保持獨立。

FWIW,你應該從來沒有在編輯器模板中包含一個實際的表單。這在許多層面上都是錯誤的,並且會產生比你想的更多的問題。