У меня есть элемент управления ASP.NET WebForms (полученный от Control, а не WebControl, если он помогает), который имеет довольно сложную функцию Render(). Элемент управления не имеет viewstate и использует только подход Control, поэтому он может отображать вывод напрямую. Я считаю, что это прекрасный кандидат на работу с подходом MVC.ASP.NET MVC - преобразование сложного элемента управления в MVC-совместимый
Я хотел бы использовать его в приложении MVC, которое я использую, однако я не знаю, как лучше всего это сделать.
Сначала я подумал о том, чтобы преобразовать его в метод HTML Helper, но мой элемент управления отображает большое количество HTML, поэтому метод Helper (с его возвращающими строками) не слишком привлекателен.
Альтернативой является PartialView, но это производные UserControl, которые в этом случае не подходят.
Я вижу другие методы HTML Helper не возвращаются HTMLString, но на самом деле использовать HtmlHelper.ViewContext.Writer писать вывод напрямую, но по этому вопросу (HtmlHelper using ViewContext.Writer not rendering correctly) он получал странные результаты. Я бы хотел избежать этой неудачи.
EDIT:
Я думаю, что я решил его с помощью HtmlHelper.ViewContext.Writer подход, и я не испытывал такую же проблему, как проблема, которую я цитировал.
Вот код, который я написал:
public static class MiniViewHelper {
public static void RenderMiniView<TModel>(this HtmlHelper html, MiniView<TModel> view, TModel model) {
TextWriter wtr = html.ViewContext.Writer;
HtmlTextWriter hwtr = wtr as HtmlTextWriter;
if(hwtr == null) hwtr = new HtmlTextWriter(wtr);
view.Render(hwtr);
}
}
public abstract class MiniView<TModel> {
public TModel Model { get; set; }
public abstract void Render(HtmlTextWriter wtr);
}
public class VeryComplicatedMiniView : MiniView<ComplicatedViewModel> {
public override void Render(HtmlTextWriter wtr) {
wtr.WriteLine("VeryComplicatedMiniView ");
}
}
Используется как и из моих страниц:
<% Html.RenderMiniView(new VeryComplicatedMiniView() { Propery1 = foo }, Model.RelevantMiniViewModel); %>
Любые мысли?
Спасибо. Я исправил свой вопрос с кодом, который я написал, чтобы решить проблему. Не могли бы вы дать мне несколько отзывов об этом? Благодаря! – Dai