MVCアプリケーションの一部にwikiが含まれています。標準的なWikiフォーマットと同様に、データをテンプレートにレンダリングするためのいくつかの特別なタグがあります。これらのタグを解析すると、リポジトリからデータを取得し、ビューモデルをインスタンス化して部分的にレンダリングし、この部分を元のタグに置き換えてマークアップに挿入します。最終化されたマークアップ自体は、関連するUIHintを持つ任意のプロパティのDisplayForの一部としてレンダリングされます。部分のテキストを返す
コードの関連部分は次のとおりです。
private static void MatchSpecial(WikiHelper wh)
{
wh.match = SpecialTagRegex.Match(wh.sb.ToString());
while (wh.match.Success)
{
wh.sb.Remove(wh.match.Index, wh.match.Length);
string[] args = wh.match.Groups[2].Value.Split('|');
switch (wh.match.Groups[1].Value.ToUpperInvariant())
{
case "IMAGE":
string imageid;
imageid = args[0];
Image i = baserepo.imagerepo.GetImage(imageid);
ViewModels.ImageViewModel ivm = new ViewModels.ImageViewModel(i, args);
wh.sb.Insert(wh.match.Index, wh.Html.Partial("ImageViewModel",ivm));
break;
}
wh.match = SpecialTagRegex.Match(wh.sb.ToString(), ws.end);
}
}
WikiHelper
の関連メンバーは以下のとおりです。MVC2で
wh.sb - StringBuilder containing the markup
wh.html - the HtmlHelper from the main view
wh.match - holds the current regex matches
これがうまく働きました。私は現在、MVC3とRazor ViewEngineにアップグレードしています。 Html.Partialが部分のMvcHtmlStringを返すことになっているにもかかわらず、代わりに空の文字列を返し、HTMLファイルの最上部に表示されるすべて同様のテンプレート要素の結果を持つレスポンスに直接コンテンツを書き込んでいます(私のレイアウトファイルの中でさえも)。
あなたはあなたの意見を投稿できますか? –