2013-04-16 2 views
1

У меня есть эта идея, когда я хотел бы сгенерировать некоторые формы в html, а затем отобразить их в winforms в веб-браузере. Заминка в том, что я не уверен, как это сделать.отображение представлений из проекта ASP.NET MVC из проекта winforms

Возможно ли иметь одно решение с проектом ASP.NET MVC и проектом Windows (или WPF) и вызвать отображение представлений из проекта asp.net в элементе управления веб-браузером в проекте форм Windows?

Я пытаюсь собрать быстрый проект тестирования и сделал легкий материал до сих пор:

  • У меня есть библиотека классов, содержащую DAL для обработки доступа DB
  • У меня есть проект MVC с контроллер и представление, которое генерирует некоторые данные для тестирования
  • У меня есть проект форм окон с формой и контролем веб-браузера.
  • Я понял, что у меня нет ни малейшего понятия о том, как перейти к представлению из моего проекта MVC.

Если бы кто-нибудь мог объяснить мне, как мне отображать вид MVC в браузере winforms, я был бы очень благодарен.

EDIT:

В основном то, что хотел бы выяснить, как сделать это:

В форме, содержащей мой веб-браузер, я бы что-то вроде этого:

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

     DisplayReport(); 
    } 

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

И я бы получил html из MyCoolView, отображаемого в веб-браузере ... Я просто не знаю, как это сделать, что делать с заявлениями и т. Д.

+0

Вы бы нужен вид двигателя, а также (на самом деле преобразовать все части функции представления в документ), который означает, что вам нужно много ручного мастерить, так как это обычно делается в веб-контексте. – bzlm

+0

Теперь я вижу, что, как вы говорите, это не реалистичный вариант. Это было бы интересное упражнение, но пустая трата времени с точки зрения производительности, я думаю. Если вы положите это как ответ, я приму это. –

ответ

1

Эта ссылка показывает как вы можете общаться между веб-браузером и вашим приложением 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

EX: - (. И передает строку переменной)

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

Это вызывает метод «тест» JavaScript, заданный на веб-странице

+0

Это не совсем то, что я хочу сделать. Я хотел бы знать, как загрузить представление из моего проекта MVC в моем проекте Winforms, но это о том, как взаимодействовать с элементом управления веб-браузером. Или я не понимаю, что вы пытаетесь мне сказать? –

+0

Вы можете управлять проектом MVC из проекта winforms, используя этот подход. Это позволит вам запускать java-скрипт, определенный на ваших страницах, для управления вашим веб-приложением – TGH

+0

да, это то, что я думал, но это могло бы предположить, что у меня уже есть что-то загруженное в веб-браузере, чего я не ... Я бы как узнать, как загрузить страницу в первую очередь. –

1

Я думаю, что это возможно, но вам нужно будет создать кучу объекта самостоятельно. В некотором смысле, это может быть похоже на модульное тестирование, где mocks создаются для многих объектов.

В прошлом я использовал эту функцию (изнутри функции контроллера), чтобы создать строку путем рендеринга частичного представления и был использован для создания электронных писем из приложения 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(); 
     } 
    } 
Смежные вопросы