今天看了老赵的文章可是怎么都调试不通过。
[AjaxPro.AjaxMethod] public string gethtml() { UcViewHelper<UserControl> viewManager = new UcViewHelper<UserControl>(); UserControl control = viewManager.LoadViewControl("~/uc/giftoutmodel.ascx"); string s=viewManager.RenderView(control); return s; } public class UcViewHelper<T> where T : UserControl { private MyPage m_pageHolder; public T LoadViewControl(string path) { m_pageHolder = new MyPage(); return (T)m_pageHolder.LoadControl(path); } public string RenderView(T control) { StringWriter output = new StringWriter(); this.m_pageHolder.Controls.Add(control); HttpContext.Current.Server.Execute(this.m_pageHolder, output, false); return output.ToString(); } } class MyPage : Page { public override void VerifyRenderingInServerForm(Control control) { //if (control is GridView || control is UserControl) //{ // return; //} //base.VerifyRenderingInServerForm(control); } }
测试通过。
如果:
[AjaxPro.AjaxMethod] public string gethtml() { string s = getString(); return s; } public string getString() { UserControl control = LoadControl("~/uc/giftoutmodel.ascx") as UserControl; StringWriter tw = new StringWriter(); HtmlTextWriter writer = new HtmlTextWriter(tw); control.RenderControl(writer); return writer.InnerWriter.ToString(); } public override void VerifyRenderingInServerForm(Control control) { // if (control is GridView || control is UserControl) // { // return; //} //base.VerifyRenderingInServerForm(control); }
究其原因,原来是老赵的代码 继承了Page 然后使用VerifyRenderingInServerForm验证,二我的代码没有继承Page直接使用VerifyRenderingInServerForm 所以会造成