从winforms项目中显示ASP.NET MVC项目的视图

时间:2013-04-16 05:58:24

标签: .net asp.net-mvc winforms

我有这个想法,我希望在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 ...我只是不知道如何操作,需要使用哪些语句等。

2 个答案:

答案 0 :(得分: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

它需要您定义为常规类的脚本对象。可以通过window.external.WhateverMethod

从JavaScript中的网站调用此对象上定义的方法

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();
        }
    }