【问题标题】:displaying views from ASP.NET MVC project from a winforms project显示来自 winforms 项目的 ASP.NET MVC 项目的视图
【发布时间】:2013-08-13 21:29:38
【问题描述】:

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

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

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

  • 我有一个包含用于处理 DB 访问的 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 语句等。

【问题讨论】:

  • 您还需要一个视图引擎(将视图的所有部分实际转换为文档),这意味着您需要进行大量手动修改,因为这通常是在 Web 上下文中完成的。
  • 我现在可以看到,正如您所说,这不是一个现实的选择。这将是一个有趣的练习,但我想从生产力的角度来看是浪费时间。如果您将此作为答案,我会接受。

标签: .net asp.net-mvc winforms


【解决方案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” - 在网页上定义(并传递一个字符串变量。)

【讨论】:

  • 这不是我想做的。我想知道如何在我的 Winforms 项目中从我的 MVC 项目中加载视图,但这是关于如何与 Web 浏览器控件交互的。还是我误解了您要告诉我的内容?
  • 您可以使用这种方法从您的 winforms 项目中命令 MVC 项目。它将使您能够运行在您的页面中定义的 java 脚本来控制您的网络应用程序
  • 是的,我就是这么想的,但那会假设我已经在网络浏览器中加载了一些东西,而我没有......我想知道如何在第一名。
  • 好的,你能定义一个代理页面来方便加载你想使用 JavaScript 显示的实际页面吗?初始加载代理页面并通过 Web 浏览器控件对其进行命令
  • 啊,这个主意不错。我会调查的。
【解决方案2】:

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

过去,我曾使用该函数(来自控制器函数内部)通过呈现局部视图来创建字符串,并用于从 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();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2023-03-03
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多