これは確かに可能です。を使用しiframe
て、ASP.NETMVCアプリケーション内でレガシーWebフォームをホストできます。たとえば、次のASP.NETMVCコントローラーがあるとします。
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.ValueFromMvc = "this value is coming from MVC";
return View();
}
public ActionResult Back(string valueFromWebForms)
{
return Content(string.Format("This value came from WebForms: {0}", valueFromWebForms));
}
}
対応する~/Views/Home/Index.cshtml
ビューで:
<iframe src="@Url.Content("~/webform1.aspx?value_from_mvc=") + @Url.Encode(ViewBag.ValueFromMvc)"></iframe>
そして次の~/WebForm1.aspx
:
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
label.Text = Request["value_from_mvc"];
}
}
protected void Link_Click(object sender, EventArgs e)
{
var httpContext = new HttpContextWrapper(Context);
var requestContext = new RequestContext(httpContext, new RouteData());
var urlHelper = new UrlHelper(requestContext, RouteTable.Routes);
Response.Redirect(
urlHelper.Action(
"Back",
"Home",
new { valuefromwebforms = "coming from WebForm1.aspx" }
)
);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="label" runat="server" />
<br/>
<asp:LinkButton
runat="server"
ID="link"
OnClick="Link_Click"
OnClientClick="document.forms[0].target='_top';"
Text="Click here to send a value back"
/>
</form>
</body>
</html>
この例では、WebFormがMVCアプリケーションの一部であり、ヘルパーを使用してそれらの間のリンクを生成できると想定しました。もちろん、そうでない場合は、絶対URLを使用して2つのアプリケーションをリンクする必要があります。