将ASP.NET MVC放入WebForms页面

Jos*_*e3d 10 asp.net asp.net-mvc asp.net-mvc-2

有没有办法.aspx使用MVC助手或其他方法将asp.net MVC动作的普通视图渲染到旧的WebForm上?

Dar*_*rov 11

免责声明:以下建议的解决方案是黑客攻击.

假设您有以下控制器:

public class HomeController : Controller
{
    [ChildActionOnly]
    public ActionResult Foo()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

和相应的部分(Foo.ascx).

现在,在遗留的WebForms页面中,您想要使用此操作.以下是您可以继续的方式:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<script type="text/C#" runat="server">
    private class DummyController : Controller { }

    public HtmlHelper Html { get; private set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        var httpContext = new HttpContextWrapper(Context);
        var controllerContext = new ControllerContext(
            httpContext, 
            new RouteData(), 
            new DummyController()
        );
        var viewContext = new ViewContext(
            controllerContext, 
            new WebFormView("Views"), 
            new ViewDataDictionary(), 
            new TempDataDictionary(), 
            TextWriter.Null
        );
        Html = new HtmlHelper(viewContext, new ViewPage());  
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%= Html.Action("About", "Home") %>
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这应该更新为使用Html.RenderAction(actionName,controllerName)或Html.RenderPartial("someView.ascx",viewModel) (2认同)