2013-07-09 25 views
5

私はHtml.HiddenForHtml.DisplayForまたはHtml.EditorForのようなテンプレートを使用できると考えていました。残念なことに、このメソッドは他と同様にTemplateNameを受け入れません。ASP.NET MVCのHiddenForテンプレートを拡張する

私が知っているのは、HiddenForsを持つDisplayFor/EditorForテンプレートを使用することです。しかし、Html.HiddenForメソッドを拡張する方法を知りたいと思います。誰でも?

よろしく

答えて

5

でフォルダ

~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml 
~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Views/Shared/DisplayTemplates/TemplateName.cshtml 

の一つにかみそり部分図を作成することで、あなたは間違った類推によって誤解されているように思えます。 HiddenForは、<input type="hidden"/>タグとまったく同じです。 TextBoxForCheckBoxForなどです。これらのメソッドはテンプレートを使用するようには設計されていません。反対側のDisplayFor/EditorForは、プロジェクトで定義されたテンプレートで使用するために特別に作成されています。したがって、あなたが求めているのは、すぐに使えるものではありません。

ただし、パラメータのセットや必要なロジックを問わず、いつでも独自のオーバーロードをHiddenForに定義することができます。ここで

1

追加パラメータを受け入れるオーバーロードがあります - htmlAttributesが。そして、それを使用して、結果タグにいくつかの属性を追加することができます。

また第二の方法は、名前HiddenInput.cshtml

1

Andre pointed outとして、HiddenForTextBoxForCheckboxForなどのヘルパーメソッドに相当しますので、あなたが、あなたは、エディタテンプレートとしてそれを作成する仕事です。

~/Shared/EditorTemplatesのエディタを実際のエディタにしたいと思う可能性があります。ここでは、使用したいコントローラーの下に「隠しエディター」を配置します。

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

Personモデルがあります。

public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
} 

部分ビューを作成します。

@Model Person 

@Html.HiddenFor(p => p.First); 
@Html.HiddenFor(p => p.Last); 

そして、我々は我々がプロパティとしてPersonを含むモデルを持っているふりをします。私たちの主な見解から、私たちは「隠されたエディタ」をそう呼ばれています。

@Model Foo 

@Html.EditorFor(f => f.Person) 

Easy pey lemon squeezy。少しハッキーですが、それは魅力のように動作します。

+0

ありがとうございましたが、私の質問によると、これは可能な回避策であることを既に知っています:-) – float

+0

これはあなたのためのものではありませんでした。これは、私のような次の人をグーグルで救うことであり、このQ/Aは馬鹿げた時間を見つけます。 – RubberDuck

関連する問題