问题背景
博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为“上一月”、“下一月”的链接生成"__doPostBack()"的js调用,如下图:
目前发现它会带来两个问题:
1. 不支持IE10;
2. 某些电脑不允许执行__doPostBack。
问题提炼
前提:
要解决的问题:
如何在ASP.NET MVC Controller中加载包含WebForms日历控件的用户控件(.ascx),并得到其输出的字符串,然后将__doPostBack的代码替换为ajax调用代码。
核心问题:
如何在ASP.NET MVC Controller中得到用户控件(.ascx)输出的字符串。
先看代码
class="cnblogs_code_copy">public ActionResult Calendar() { var page = new Page(); var form = new HtmlForm(); var calendar = page.LoadControl("~/Controls/CNBlogsCalendar.ascx"); form.Controls.Add(calendar); page.Controls.Add(form); using (var sw = new StringWriter()) { System.Web.HttpContext.Current.Server.Execute(page, sw, true); return Content(sw.ToString()); } }
代码很简单,但得到这个代码花了今天一上午时间。
代码说明:
代码运行结果:
完整代码下载:
http://files.cnblogs.com/dudu/CNBlogsDemoMvcAscx.rar
http://www.cnblogs.com/dudu/archive/2012/05/03/asp_net_mvc_ascx.html