4

我正在开发 MVC 项目,我必须在那里使用 Web 表单控件。我可以在我的 mvc 项目视图中包含 iframe 中的整个页面,这不是问题。这种行为是可以接受的。但是我需要交换的数据有问题。我想从那里的控制器发送一些数据,并在控制结束后得到一些响应。更具体地说:

1. 在启动时从控制器向 Web 控件发送一些初始值。
2. Web 表单中的“魔术”按钮被单击时,我已经将控件生成的一些数据发回控制器。

这甚至可能吗?

4

1 回答 1

6

这当然是可能的。您可以使用iframeASP.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 来链接两个应用程序。

于 2012-10-12T15:03:58.643 回答