У меня есть два приложения, написанные в виде aspx-страницы, а другое в MVC5-бритве cshtml.Share Razor Partial View in WebForms iFrame
Веб-форма имеет встроенный iframe, и я хочу загрузить файл cshtml razor внутри iframe, когда пользователь нажимает кнопку.
Я искал и нашел полезные сообщения для смешивания веб-форм и страниц MVC, чтобы я мог показать страницу MVC на странице aspx webforms.
How to use ASP.Net MVC View inside WebForms .aspx page?
How to include a partial view inside a webform
на основе пост выше, я создал класс MvcUtility в моем приложении MVC под новую папку под названием хелперы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Desk.Web.Client.Controllers;
using Desk.Web.Client.Models;
namespace Desk.Web.Client.Helpers
{
public class RazorPartialBridge
{
private static void RenderPartial(string partialViewName, object model)
{
HttpContextBase httpContextBase = new HttpContextWrapper(HttpContext.Current);
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Dummy");
ControllerContext controllerContext = new ControllerContext(new RequestContext(httpContextBase, routeData), new DummyController());
IView view = FindPartialView(controllerContext, partialViewName);
ViewContext viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), httpContextBase.Response.Output);
view.Render(viewContext, httpContextBase.Response.Output);
}
//Find the view, if not throw an exception
private static IView FindPartialView(ControllerContext controllerContext, string partialViewName)
{
ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, partialViewName);
if (result.View != null)
{
return result.View;
}
StringBuilder locationsText = new StringBuilder();
foreach (string location in result.SearchedLocations)
{
locationsText.AppendLine();
locationsText.Append(location);
}
throw new InvalidOperationException(String.Format("Partial view {0} not found. Locations Searched: {1}", partialViewName, locationsText));
}
//Here the method that will be called from MasterPage or Aspx
public static void RenderAction(string controllerName, string actionName, object routeValues)
{
RenderPartial("PartialRender", new RenderActionViewModel() { ControllerName = controllerName, ActionName = actionName, RouteValues = routeValues });
}
}
}
как указано в сообщении. Затем я создал класс (RendeActionViewModel) внутри папки модели и код
namespace Desk.Web.Client.Models
{
public class RenderActionViewModel
{
public string ControllerName { get; set; }
public string ActionName { get; set; }
public object RouteValues { get; set; }
}
}
Я создал фиктивный контроллер в папке контроллеров
public class DummyController : Controller
{
public ActionResult PartialRender()
{
return PartialView();
}
}
Затем я создал представление под названием PartialRender.cshtml под просмотра.
@model RenderActionViewModel
<h1>Hello World</h1>
<p>
I was rendered from a <strong>@Model.Source</strong>!
</p>
В веб-форме моего веб-приложения asp.net я создал новую страницу aspx и добавил код ниже.
<%@ Page Title="Demo" Language="C#"
AutoEventWireup="true" Inherits="Demo" Codebehind="Demo.aspx.cs" %>
<html>
<head></head>
<body>
<% RazorPartialBridge.RenderPartial("_Partial", new RenderActionViewModel() { Source = "ASPX Page" }) %>
</body>
</html>
Однако, когда я запустить приложение, я получаю ошибку ниже
Частичный вид PartialRender не найден. Поиск мест: ~/Просмотры/Dummy/PartialRender.aspx ~/Просмотры/Dummy/PartialRender.ascx ~/Просмотры/Shared/PartialRender.aspx ~/Views/Shared/PartialRender.ascx ~/Views/Dummy/PartialRender. cshtml ~/Просмотров/Dummy/PartialRender.vbhtml ~/Просмотров/Shared/PartialRender.cshtml ~/Просмотров/Shared/PartialRender.vbhtml
и имя вида возвращается в нуль в приведенном ниже коде, когда я попытался отладить заявку
ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, partialViewName);
Может кто-нибудь, пожалуйста, помогите мне и сообщите мне, где Я не прав?
Спасибо за информацию. Я это попробую. –