【发布时间】:2014-02-28 16:53:39
【问题描述】:
因此,像许多人一样,我正在尝试将旧的(并且非常大的)Webforms 应用程序迁移到 MVC4 应用程序。因为重写是令人生畏的(并且实际上是不可行的),所以我试图将应用程序包装在 MVC 应用程序中。从那里我们将重写部分。我有一个相当成功的 HtmlHelper 扩展,它可以渲染旧的 webforms 控件。它看起来像这样:
public static MvcHtmlString RenderClassicControl(this HtmlHelper html, string controlPath)
{
var sb = new StringBuilder();
var stWriter = new StringWriter(sb);
var htmlWriter = new HtmlTextWriter(stWriter);
var page = new Page();
page.PreInit += ((s, e) =>
{
var form = new HtmlForm();
form.ID = "Form";
form.Attributes.Add("enctype", "multipart/form-data");
page.Controls.Add(form);
var control = page.LoadControl(controlPath);
form.Controls.Add(control);
page.Controls.Add(form);
});
HttpContext.Current.Server.Execute(page, htmlWriter, true);
return new MvcHtmlString(sb.ToString());
}
我遇到的问题是,尽管呈现的 html 看起来与当前站点相同,但当我完成对该控件的操作时,什么也没有发生。请求集合中有一些我希望看到的东西(如 __EVENTTARGET),但它们是空的并且 isPostback 是错误的。我希望我在这里遗漏了一些东西,我希望有人有一些想法。非常感谢您抽出宝贵时间!
【问题讨论】:
-
如果没有时间重写,为什么要将其转换为 MVC?是因为您希望网站上的新开发工作使用 MVC?如果是这样,两人可以在same site 上并肩生活。我猜测为什么回发没有发生是因为 WebForms 依赖的还有一个或 JS 文件,但在您的 MVC 页面中没有引用。
-
当然是的,但也因为我试图放弃一个非常旧的 DotNetNuke 版本,该版本从未正确实现,并且在 .net 4 中表现不佳
-
为什么不将旧的 webforms 控件转换为 MVC 用户控件,然后将它们呈现为部分或操作? stackoverflow.com/questions/12714071/…
-
因为我试图替换的 DotNetNuke 框架对每个页面都使用了用户控件。我真的没有时间全部转换。
-
我想我不明白为什么要引入 MVC。我要么继续使用与你拥有的 DotNetNuke 版本兼容的框架版本,要么尝试替换你所拥有的具有较新版本的 ASP.NET Webforms。通过使用 MVC,您正在尝试升级和更改架构,同时这样做非常痛苦,应该尽可能避免。
标签: c# asp.net asp.net-mvc-4 webforms