ASP.NET MVC中加载WebForms用户控件(.ascx)

时间:2014-06-26 23:08:47   收藏:0   阅读:371
原文:ASP.NET MVC中加载WebForms用户控件(.ascx)

问题背景

博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为“上一月”、“下一月”的链接生成"__doPostBack()"的js调用,如下图:

bubuko.com,布布扣

目前发现它会带来两个问题:

1. 不支持IE10;

2. 某些电脑不允许执行__doPostBack。

问题提炼

前提:

  1. 我们想以最低的成本解决这个问题,也就是对当前代码尽可能少的改动。所以要尽可能重用现有的日历控件代码。
  2. 日历改为Ajax加载,点击“上一月”、“下一月”时Ajax更新日历内容。
  3. 用ASP.NET MVC处理Ajax请求。

要解决的问题:

如何在ASP.NET MVC Controller中加载包含WebForms日历控件的用户控件(.ascx),并得到其输出的字符串,然后将__doPostBack的代码替换为ajax调用代码。

核心问题:

如何在ASP.NET MVC Controller中得到用户控件(.ascx)输出的字符串。

解决方法

先看代码

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());
    }
}

代码很简单,但得到这个代码花了今天一上午时间。

代码说明:

代码运行结果:

bubuko.com,布布扣

完整代码下载:

http://files.cnblogs.com/dudu/CNBlogsDemoMvcAscx.rar 

ASP.NET MVC中加载WebForms用户控件(.ascx),布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!