我有这个想法,我希望在html中生成一些表单,然后在Web浏览器控件中以winforms显示它们。 遗憾的是,我不知道该怎么做。
是否可以使用ASP.NET MVC项目和Windows窗体(或WPF)项目获得一个解决方案,并调用在Windows窗体项目的Web浏览器控件中显示asp.net项目中的视图?
我正在尝试组建一个快速测试项目,并且到目前为止已经做了很简单的事情:
如果有人可以向我解释如何在winforms浏览器中显示MVC视图,我将非常感激。
编辑:
基本上想要弄清楚如何做的是:
在包含我的网络浏览器的表单中,我会做这样的事情:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DisplayReport();
}
public void DisplayReport()
{
this.webBrowser1.Navigate(MyMvcProject.Controller.MyCoolView);
}
}
我会从Web浏览器控件中显示的MyCoolView中获取html ...我只是不知道如何操作,需要使用哪些语句等。
答案 0 :(得分:1)
此链接显示了如何在Web浏览器控件和wpf / winforms应用程序之间进行通信。这无缝地工作,是一种非常简洁的方式,以促进浏览器控件和网页之间的双向通信 http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx
它需要您定义为常规类的脚本对象。可以通过window.external.WhateverMethod
EX:
webBrowser1.Document.InvokeScript("test",
new String[] { "called from client code" });
这会调用JavaScript方法“test” - 在网页上定义(并传递一个字符串变量。)
答案 1 :(得分:1)
我认为这可能是可能的,但你必须自己创建一堆对象。从某种意义上说,它可能类似于单元测试,其中为许多对象创建了模拟。
过去,我使用该函数(来自Inside控制器函数)通过呈现部分视图来创建字符串,并且它用于从ASP.NET MVC应用程序生成电子邮件。
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult =
ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext,
viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}