1

我有这个想法,我想在 html 中生成一些表单,然后在 web 浏览器控件中的 winforms 中显示它们。问题是我不知道该怎么做。

是否可以有一个具有 ASP.NET MVC 项目和 Windows 窗体(或 WPF)项目的解决方案,并调用在 Windows 窗体项目的 Web 浏览器控件中显示来自 asp.net 项目的视图?

我正在尝试组织一个快速测试项目,并且到目前为止已经完成了简单的工作:

  • 我有一个包含用于处理数据库访问的 DAL 的类库
  • 我有一个带有控制器和视图的 MVC 项目,它生成一些用于测试的数据
  • 我有一个带有窗体和 Web 浏览器控件的 Windows 窗体项目。
  • 我已经意识到,对于如何从我的 MVC 项目导航到视图,我没有最微弱的线索。

如果有人可以向我解释如何在 winforms 浏览器中显示 MVC 视图,我将不胜感激。

编辑:

基本上想弄清楚该怎么做是这样的:

在包含我的网络浏览器的表单中,我会做这样的事情:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        DisplayReport();
    }

    public void DisplayReport()
    {
        this.webBrowser1.Navigate(MyMvcProject.Controller.MyCoolView);
    }
}

而且我会从 Web 浏览器控件中显示的 MyCoolView 中获取 html ......我只是不知道如何去做,需要什么 using 语句等。

4

2 回答 2

1

我认为这可能是可能的,但您必须自己创建一堆对象。从某种意义上说,它可能类似于为许多对象创建模拟的单元测试。

过去,我使用该函数(来自控制器函数内部)通过呈现局部视图来创建字符串,并使用它从 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();
        }
    }
于 2013-08-13T13:29:38.860 回答
1

此链接显示了如何在 Web 浏览器控件和 wpf/winforms 应用程序之间进行通信。这可以无缝工作,并且是一种非常简洁的方式来促进浏览器控件和网页之间的双向通信 http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

http://www.west-wind.com/weblog/posts/2008/Sep/27/Calling-JavaScript-functions-in-the-Web-Browser-Control

它需要一个您定义为常规类的脚本对象。在此对象上定义的方法可以通过 JavaScript 从网站调用window.external.WhateverMethod

前任:

webBrowser1.Document.InvokeScript("test",
            new String[] { "called from client code" });

这调用了在网页上定义的 JavaScript 方法“test”(并传递了一个字符串变量。)

于 2013-04-16T06:02:11.577 回答