2012-10-12 40 views
4

我正在開發MVC項目,我必須在那裏使用web窗體控件。我可以在我的mvc項目視圖中包含iframe中的整個頁面,這不是問題。這種行爲是可以接受的。 但是我需要交換的數據有問題。我想從控制器發送一些數據,並在控制結束後得到一些響應。更具體地說:

1.在啓動時從控制器發送一些初始值到網頁控件。
2.網頁表單中點擊時出現類似「魔術」按鈕的信息我用控件生成的一些數據回發給控制器。Mvc和Web表單。如何在它們之間發送數據?

這甚至可能嗎?

+0

你是否意味着將數據從.aspx頁面發送到mvc頁面(操作方法)? – Nwafor

回答

5

這當然是可能的。您可以使用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來鏈接2個應用程序。