2012-03-20 10 views
0

Ok ..月に最も奇妙で最も混乱しやすい質問: 私はHtmlHelperをいくつか作成したいと思いますが、htmlをどのようにレンダリングするのですか?それでもっとシンプルにしたいと思います。私は "普通の"コントローラと同じことをしたいと思いますし、ビューはいくつかのデータを取得し、ビューに渡してからHTMLをレンダリングしますが、いくつかのデータを部分的なビューに渡して、返されたHTMLを文字列として取得し、そのHTMLをHtmlHelperメソッドから返します。 このようにして、@ Html.HeadMenuのインスタンスを書くことができますheadmenuのhtmlを返しますが、いつでも再コンパイルしなくてもhtmlを変更できるようになります。その部分的な見解からすべてのことができます。サーバーサイドのことについて心配する必要はありません。私はまた、私のメソッドが@Htmlに表示されるので、intellisenseをfにします。HtmlHelperとしてのPartialView?

私はあなたが事前に..

感謝を説明するのは難しいのは、その種this..since理解を願っています!

答えて

1

HTML拡張の方法について教えてください。あなたは正しいことをしようとしていますか?

@{ 
var htmlString = Html.Partial("YourPartialViewName").ToString(); 
} 

あなたが部分図にモデルを渡すことができるようにそれはまた、過負荷を持っています

@{ 
var htmlString = Html.Partial("YourPartialViewName", partialViewModel).ToString(); 
} 
+0

に変更)へ実際の文字列を取得します(このメソッドはMvcHtmlStringを返します)。 –

+0

@JustinNiessner良いキャッチ、ありがとう!私の答えを更新しました。 名前空間PMT.Core.Helpers「 { パブリッククラスMenuHelper { パブリック静的な文字列HeadMenu(このHtmlHelperのヘルパー) { リターンHtml.Partial(:私のような何かをしたい場合 –

+0

は何を働く可能性があります..しかし、 YourPartialViewName "、partialViewModel).ToHtmlString(); }} } は、最良の例もよいが、病気、あなたがアイデアを得る推測しない場合があります:) – Inx

1

あなたはHtml.RenderAction(actionName, controllerName, routeValues)方法を探していることができました。

0

は、私がこのよう

あなたは、今からViews/Shared/DisplayTemplates

@model HeadMenuViewModel 
<div> 
//// 
</div> 

であなたをHeadMenuViewModel.cshtmlという名前のビューを定義し、あなたのHtmlHelperに

public class HeadMenuViewModel 
{ 
    public string SomeProperty {get;set;} 
} 

を渡すために想像のデータを定義し、それを行うだろう

を使用してデータを表示できます
@Html.DisplayFor(model => model.HeadMenu) 

そして、あなたは、それ

using System.Web.Mvc.Html; 
... 
    public static MvcHtmlString HeadMenu<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
    { 
     return helper.DisplayFor(expression); 
    } 

用という名前のショートカット拡張を書くことができ、あなたが必要とするあなたのHeadMenuViewModel.cshtml毎回あなたがToHtmlString()またはToStringメソッド(のいずれかを呼び出すこともあるんだけど

関連する問題