2013-03-16 19 views
5

Mam kontroler o nazwie ProductController i używam metody indeksu do załadowania widoku indeksu za pomocą formularza internetowego o nazwie WebForm1.aspx, Widok indeksu został skonfigurowany i działa poprawnie. Teraz chcę dodać element iframe w widoku indeksu, aby wyświetlić zawartość WebForm1.aspx. Oba widoki są w tym samym folderze Widoki/Produkty w projekcie MVC. Zrobiłem następujące:iframe w widoku MVC do załadowania formularza WWW asp.net

<iframe src="/ProductsController/Index?WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

moich poglądów/web.config jest ustawiony jako następny:

i dziedziczenie WebForm jest następny:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

Jeszcze iframe wyświetla komunikat o błędzie: "HTTP 404 - Zasób, którego szukasz (lub jedna z jego zależności) mógł zostać usunięty ed, zmieniła nazwę lub jest chwilowo niedostępna. "

Próbowałem też dodać do mojego pliku Global.asax następny wiersz:

RouteTable.Routes.RouteExistingFiles = true; 

ale również nie,

Unikalny sposób dostać iFrame wyświetlane ale pusty jest wykorzystanie pełnego ścieżka fizyczna jako następna:

<iframe src="C\:Folder1\Folder2\ ...\Views\Products\WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

Czy ktoś może wyjaśnić, dlaczego to nie działa? I jak to działa? Dziękuję Ci.

Odpowiedz

1

Możesz wskazać rzeczywistą lokalizację pliku Webform.aspx.

<iframe src="/FolderPath/WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

Kod asssumes że środowisko wykonawcze MVC będzie patrząc na folderze o nazwie „ProductsController” i podkatalogu o nazwie „Indeks”

Jeśli WebForm1.aspx plik jest naprawdę w tej strukturze katalogów, zmiany atrybut src do src="/ProductsController/Index/WebForm1.aspx"

13

Powinieneś umieścić swój plik .aspx (formularz internetowy) z folderu widoków, ponieważ normalnie każde połączenie z przeglądarki jest blokowane przez "BlockViewHandler" (co widać w pliku web.config folderu widoków).

W każdym innym folderze, który utworzysz, powinien działać bez kontrolera. Na przykład, jeśli umieścisz go w "/webforms/webform1.aspx", ta ścieżka będzie używana w elemencie iframe.

UPDATE Oto przykład z nowych informacji w kwestii, nadzieję, że może pomóc:

Kontroler:

public class ProductsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); //Razor file in Views/Products/Index.cshtml 
    } 

    public ActionResult ActionThatRetrieveAndAspx() 
    { 
     return View("WebForm1"); //Aspx file Views/Products/WebForm1.aspx 
    } 
} 

zawartości produktów index.html, nazywając plik aspx za pomocą iframe:

@{ 
    ViewBag.Title = "Index title"; 
} 

<h2>Index</h2> 

Calling aspx file from iframe: 

<iframe src="@Url.Action("ActionThatRetrieveAndAspx","Products")" width="1000" height="400"></iframe> 

Zawartość produktów WebForm1.aspx:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title>Title</title> 
    </head> 
    <body style="background-color: #999999; padding: 10px;"> 
     This is ActionThatRetrieveAndAspx WebForm1.aspx 
    </body> 
</html> 
+0

„/webforms/webform1.aspx”, masz na myśli że formularze internetowe znajdują się bezpośrednio w ścieżce głównej projektu? jeśli tak, to nie działa. –

+1

To jest druga odpowiedź ... Mam na myśli to, że jeśli masz plik aspx, który dziedziczy po System.Web.UI.Page (WebForm1.aspx), ten plik powinien być umieszczony poza folderem Wyświetlenia, w ten sposób możesz wywołać to przez "normalny" adres URL bez przekazywania żądania przez kontroler ... Innym rodzajem aspx są te, które dziedziczą po "System.Web.Mvc.ViewPage" te pliki zachowują się jak pliki Razor, powinny być umieszczone w folderze widoków, a żądanie odbywa się za pośrednictwem kontrolera. – jherrera

+0

dzięki za wyjaśnienia, zaktualizowałem moje pytanie, proszę spojrzeć. –

0

Włożyłem formularza internetowego w folderze głównym projektu MVC i nazwać tak:

<iframe src="~/webform.aspx"...></iframe> 

nie odwoływać w kontrolerze.

miłym dodatkiem do tej techniki jest to, że można łatwo poruszać się z powrotem do swojej stronie MVC poprzez linki nawigacyjne w formularzu internetowym otwartym w target = „_ dominująca”

Powiązane problemy