Gibt es eine Möglichkeit, eine normale Ansicht von asp.net MVC Aktion auf einem alten Webformular .aspx
mit einem MVC-Helfer oder eine andere Methode zu rendern?ASP.NET MVC in eine WebForms-Seite einfügen
10
A
Antwort
10
Haftungsausschluss: Die vorgeschlagene Lösung ist ein Hack.
Angenommen, Sie haben die folgenden Controller:
public class HomeController : Controller
{
[ChildActionOnly]
public ActionResult Foo()
{
return View();
}
}
und einen entsprechenden Teil (Foo.ascx
).
Und jetzt in einer alten WebForms-Seite wollten Sie diese Aktion verwenden. Gehen Sie folgendermaßen vor:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<script type="text/C#" runat="server">
private class DummyController : Controller { }
public HtmlHelper Html { get; private set; }
protected void Page_Load(object sender, EventArgs e)
{
var httpContext = new HttpContextWrapper(Context);
var controllerContext = new ControllerContext(
httpContext,
new RouteData(),
new DummyController()
);
var viewContext = new ViewContext(
controllerContext,
new WebFormView("Views"),
new ViewDataDictionary(),
new TempDataDictionary(),
TextWriter.Null
);
Html = new HtmlHelper(viewContext, new ViewPage());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%= Html.Action("About", "Home") %>
</div>
</form>
</body>
</html>
0
Ich denke, die einfachste wäre clientseitige Skripting. Zum Beispiel mit jQuery.Load
2
Ich habe diesen Code in meiner MasterPage verwendet und es hat funktioniert. Aber nach Tagen habe ich festgestellt, dass meine Anwendung wegen Speicherlecks jede Minute neu gestartet wurde. Ich habe Tage für die Ursache gesucht und schließlich war dieser Teil des Codes die Ursache für Speicherverlust. Sie müssen DummyController und ViewPage entfernen. Ich fixiere haben es wie folgt aus:
public class BaseMaster : System.Web.UI.MasterPage
{
#region MVC
Controller _controller= new DummyController();
ViewPage _viewPage = new ViewPage();
private class DummyController : Controller { }
public HtmlHelper Html { get; private set; }
private void InitHtmlHelper()
{
var httpContext = new HttpContextWrapper(Context);
var controllerContext = new ControllerContext(
httpContext,
new RouteData(),
_controller
);
var viewContext = new ViewContext(
controllerContext,
new WebFormView(controllerContext,"Views"),
new ViewDataDictionary(),
new TempDataDictionary(),
TextWriter.Null
);
Html = new HtmlHelper(viewContext, _viewPage);
}
public override void Dispose()
{
base.Dispose();
_controller.Dispose();
_viewPage.Dispose();
}
#endregion
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
InitHtmlHelper();
...
...
}
...
}
Verwandte Themen
- 1. Einfügen Glyphicons bootstrap in @ Html.ActionLink mvc asp.net
- 2. Mehrere Tabellen einfügen von ASP.net MVC Seite
- 3. ASP.NET MVC Einfügen von Formularwerten in ein ViewModel
- 4. Einfügen in mehrere Datenbanktabellen mit Linq, ASP.NET MVC
- 5. ASP.NET MVC - Eine Route erhalten
- 6. Bereitstellung asp.net MVC
- 7. ASP.NET (MVC) - Renderseite in eine Datei
- 8. ASP.NET MVC-Modell Bindung in eine Liste
- 9. asp.net MVC HTML-Injektion
- 10. Suchformular in asp.net MVC
- 11. Sitzungsende in ASP.net MVC
- 12. Einschließlich Partials, ASP.NET MVC
- 13. HTML.Button in ASP.NET MVC
- 14. Ajax in Asp.net mvc
- 15. Paging in asp.net Mvc
- 16. LinkButton in ASP.NET MVC
- 17. Protokollierungsfehler in ASP.NET MVC
- 18. Modellwarnungen in ASP.NET MVC
- 19. Statusverwaltung in ASP.NET MVC
- 20. asp.net mvc Verwendung angularjs post json Typ Controller einfügen Datenbank
- 21. Identitätswechsel in ASP.NET MVC
- 22. ASP.NET MVC ohne ASP.NET?
- 23. Zeitzonen in ASP.NET MVC?
- 24. Asp.net Daten einfügen in sqlserver
- 25. ASCX in ASP.NET MVC
- 26. Summernote in Asp.Net MVC
- 27. Webhook in Asp.net MVC
- 28. Entitätsdiagramme in ASP.NET MVC
- 29. Tabs in ASP.NET MVC
- 30. Asp.NET MVC in Unterordner
Dies sollte aktualisiert werden Html.RenderAction (action, controller) oder Html.RenderPartial ("someView.ascx", Ansichtsmodell) –
+1 Werke für mich in MVC3 zu verwenden, ich benötigt, um den 'controllerContext' an den' WebFormView'-Konstruktor zu übergeben, um es zu kompilieren. –
Um 'RenderAction' zum Arbeiten zu bringen, führen Sie die obigen Schritte aus und ändern' TextWriter.Null' in 'Response.Output' und ändern Sie' <% = 'in' <% '. – leppie