我有一个ASP.NET WebForms控件(派生自Control,不是WebControl,如果有帮助的话)具有相当复杂的Render()函数。该控件没有视图状态,只使用Control方法,因此它可以直接渲染输出。我觉得这是使用MVC方法的好选择。ASP.NET MVC - 将复杂的控件转换为MVC友好的
我想在我正在使用的MVC应用程序中使用它,但是我不知道最好的解决方法是什么。
起初我想过把它转换成HTML Helper方法,但是我的控件渲染了大量的HTML,因此Helper方法(使用它返回字符串)并不太吸引人。
另一种方法是PartialView,但这些都是UserControl派生,在这种情况下不适合。
我看其他HTML辅助方法不返回HtmlString,但实际上使用HtmlHelper.ViewContext.Writer直接写输出,但根据这个问题(HtmlHelper using ViewContext.Writer not rendering correctly)他得到奇怪的结果。我想避免这种不幸。
编辑:
我想我已经使用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