Возврат текста Частичного - PullRequest
       3

Возврат текста Частичного

1 голос
/ 07 декабря 2011

Часть моего приложения 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-файла.(даже прежде чем что-либо в моем файле макета).

1 Ответ

1 голос
/ 07 декабря 2011

Учитывая симптомы, которые вы описываете, я подозреваю, что вы напрямую пишете в поток ответов где-то в ваших пользовательских помощниках.Поэтому, где бы вы ни выводили ответ, убедитесь, что вы заменили:

htmlHelper.ViewContext.HttpContext.Response.Write("some string");

на:

htmlHelper.ViewContext.Writer.Write("some string");

Запись непосредственно в поток ответов работала в движке представления WebForms, потому что он унаследован от классическогоВеб-формы, где это было, как все должно было работать.В ASP.NET MVC, хотя это неверно.Это сработало, но неверно.Вместо этого все помощники должны писать ViewContext.Writer.Razor записывает вещи во временные буферы, которые затем сбрасываются в ответ.Он использует рендеринг наизнанку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...