2011-06-28 8 views
0

モデルインスタンスを設定し、このモデルのプロパティをバインドしてhtmlをレンダリングするためのHtmlHelper拡張メソッドを作成したいと考えています。モデルのプロパティをバインドするHtmlHelper。 Fluent Interface

これはTelerikグリッドに近い類似のパターンに従います。

次の例では、ModelをグリッドのDataContextとして設定しています。 次に、いくつかの列を宣言します。 Foreach列では、モデルに関してはIEnumerableのプロパティをバインドします。したがって、グリッドが行をレンダリングするとき、それぞれのプロパティは、その行のモデルのインスタンスからバインドされます。

@(Html.Telerik().Grid(Model) 
     .Name("Grid") 
     .Columns(columns => 
     { 
      columns.Bound(o => o.OrderID).Width(100); 
      columns.Bound(o => o.ContactName).Width(200); 
      columns.Bound(o => o.ShipAddress); 
      columns.Bound(o => o.OrderDate).Format("{0:MM/dd/yyyy}").Width(120); 
     }) 
     .Scrollable(scrolling => scrolling.Enabled((bool)ViewData["scrolling"])) 
     .Sortable(sorting => sorting.Enabled((bool)ViewData["sorting"])) 
) 

基本的には、Boundメソッドの実装方法に関するアイデアがあります。私のシナリオでは、モデルもIEnumerableになります。だから、MyObjは次のようになり、私は引数の便宜上List<MyObj>

あるモデルを持って言うことができます:

public class MyObj 
{ 
    public bool IsRegistered { get; set;} 
    public string Name { get; set; } 
} 

私は私のリストをレンダリングして見えるのHtmlHelperを呼び出すビューで終わるしたいと思います

@(Html.MyHelpers().MyList(Model) 
        .ControlOne.Bound(o => o.IsRegistered) 
        .ControlTwo.Bound(o => o.Name) 
) 

私はまだたくさん試していないし、正直言ってこれを実装する方法はわかりません。だから私は進行中の作業であるので、私は更新を掲載する予定です。しかし、アイデアや提案があれば、私はそれを感謝します。私はグリッドを使うことができると知っていますが、このヘルパーは軽量になります。私はあまり機能を必要とせず、この目的のためにtelerikグリッドをドラッグしたくありません。

ありがとうございます!

答えて

0

のようないくつかのオープンソースプロジェクトをチェックアウトする場合がありますが、あなたは、ASP.NET以来(Html.DisplayForModel()のソースコードを見たことがありMVCはオープンソースです)?多分それはあなたにいくつかの手がかりを与えるでしょう。 ASP.NET MVC 3 RTM用

ソースコードはここにある:あなたがmvc3-rtm-sources\mvc3\src\SystemWebMvc\Mvc\Html

ポイントであるDisplayExtensions.csTemplateHelpers.csを見る必要がhttp://aspnet.codeplex.com/releases/view/58781

ビットすでにレンダリングするHtml.DisplayForModel()を使用することができるということですモデルの各プロパティを制御し、ソースコードを見ることでどのように処理されているかを確認できるので、簡単に調整できます。

Html.EditorForModel()を含むEditorExtensions.csもあります。これは編集バージョンを提供します。

ASP.NET MVCの重要な点は、その一部をスワップアウトして独自のものを作成できることです。

関連する問題