我有一個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