Часть моего приложения MVC включает вики.Помимо стандартного вики-форматирования, существует ряд специальных тегов для отображения данных в шаблонах.При синтаксическом анализе этих тегов он получает данные из хранилища, создает экземпляр модели представления и отображает ее в частичную часть, которая затем вставляется в разметку, заменяя исходный тег.Сама завершенная разметка отображается как часть DisplayFor в любых свойствах с соответствующим UIHint.
Соответствующая часть кода:
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
:
wh.sb - StringBuilder containing the markup
wh.html - the HtmlHelper from the main view
wh.match - holds the current regex matches
В MVC2 это работало нормально.Сейчас я нахожусь в процессе обновления до MVC3 и Razor ViewEngine.Несмотря на то, что Html.Partial должен возвращать MvcHtmlString части, он вместо этого возвращает пустую строку и записывает содержимое непосредственно в ответ, в результате чего все элементы с аналогичным шаблоном появляются в самой верхней части HTML-файла.(даже прежде чем что-либо в моем файле макета).