我正在开发 MVC 项目,我必须在那里使用 Web 表单控件。我可以在我的 mvc 项目视图中包含 iframe 中的整个页面,这不是问题。这种行为是可以接受的。但是我需要交换的数据有问题。我想从那里的控制器发送一些数据,并在控制结束后得到一些响应。更具体地说:
1. 在启动时从控制器向 Web 控件发送一些初始值。
2. Web 表单中的“魔术”按钮被单击时,我已经将控件生成的一些数据发回控制器。
这甚至可能吗?
我正在开发 MVC 项目,我必须在那里使用 Web 表单控件。我可以在我的 mvc 项目视图中包含 iframe 中的整个页面,这不是问题。这种行为是可以接受的。但是我需要交换的数据有问题。我想从那里的控制器发送一些数据,并在控制结束后得到一些响应。更具体地说:
1. 在启动时从控制器向 Web 控件发送一些初始值。
2. Web 表单中的“魔术”按钮被单击时,我已经将控件生成的一些数据发回控制器。
这甚至可能吗?
这当然是可能的。您可以使用iframe
ASP.NET MVC 应用程序中托管旧版 WebForm。例如,假设您有以下 ASP.NET MVC 控制器:
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 来链接两个应用程序。