4

私はMVCプロジェクトに取り組んでおり、そこでWebフォームコントロールを使用する必要があります。mvcプロジェクトビューのiframeにページ全体を含めることができますが、これは問題ありません。そのような振る舞いは受け入れられます。しかし、交換する必要のあるデータに問題があります。そこにあるコントローラーからデータを送信し、コントロールが作業を終了した後に応答を取得したいと思います。具体的には、次のよう

にします。1.起動時にコントローラーからWebコントロールに初期値を送信します。
2.クリックされたときのWebフォームの「魔法」ボタンのようなものコントロールによって生成されたデータを使用してコントローラーにポストバックしました。

これも可能ですか?

4

1 に答える 1

6

これは確かに可能です。を使用し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つのアプリケーションをリンクする必要があります。

于 2012-10-12T15:03:58.643 に答える