2017-03-31 3 views
2

ためCSHTMLでエディタをレンダリング:は、私は次のviewmodel持っているのviewmodel

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

そして、私のかみそりビューで、私はこのモデルの版を許可するフォームを実装しようとしていますが、これは私がやったことです:

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

この作業が、私は新しい行で、私は私のviewmodelにプロパティを追加または削除するたびに、私のかみそりのビューを更新する必要がありますように、それは少し重いですされています。 すべてのviewmodelプロパティの編集を可能にするフォームを1行で生成することはできません。私はこれらの2つの以下の行を試してみましたが、それは何もレンダリングされません:

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

カスタマイズしたtextBoxを作成しますか? –

答えて

0

エディタのテンプレートを使用しての全体の全体のポイントは、物事が提示されている方法をカスタマイズすることです。あなたがやりたいことが電話Html.EditorForModel()であれば、エディタテンプレートをまったく必要とせずにビュー内でまっすぐにすることができます。

これは特に動作しない理由は、基本的には無限の再帰があるからです。 Html.EditorForModel()は、エディターテンプレートがある場合はこれを使用して、モデルのフィールドをレンダリングします。論理的には、それを実際のエディタテンプレートで呼び出すことはできません。

簡略化したい場合は、文字列、日付時刻などの基本的な種類のカスタムエディタテンプレートを作成する必要があります。Html.EditorForModel()などを呼び出すと、そのモデルのすべてのプロパティのフィールドがレンダリングされますそれらのプロパティタイプのエディタテンプレートはです。こうすることで、カスタムフィールドを手作業で指定する必要がなくなります。 MyViewModelのような複雑なタイプのエディタテンプレートを作成する唯一の理由は、そこに非常に具体的なことをしたい場合です。それ以外の場合は、そのままにしておきます。

FWIWの場合、は決してには、実際のフォームをエディタテンプレートに含める必要があります。ああそう多くのレベルでちょうど間違っている、あなたが解決していると思うよりもはるかに多くの問題を作成します。

関連する問題