在具有部分视图的ViewEngines之间切换并不能找到要显示的视图

时间:2016-10-25 16:53:23

标签: asp.net asp.net-mvc webforms razorengine webforms-view-engine

我有一个使用Web-Forms创建的遗留应用程序,并尝试使用asp.net mvc在局部视图中呈现内容。关注@ScottHanselman发布的MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3,最后是Matt Honeycutt方法http://trycatchfail.com/blog/post/ASPNET-MVC-3-Razor-C-and-VBNET-WebForms-Using-Razor-Views-With-WebForms-Master-Pages

我在网页表单中找到了一个视图

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/MyMasterSite.Master" AutoEventWireup="false"
    CodeBehind="InvoiceProfileReport.aspx.cs" Inherits="MyWebFormsNameSpace" %>
<%@ Import namespace="MyMvc.MvcReports.Controllers" %>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
    <%= this.BlackMagicMVC().Partial("HomepageWidget") %>
</asp:Content>

如您所见,我正在尝试插入View视图文件夹中的HomepageWidget

Solution Explorer

我的控制器在请求周围创建一个包装器,Partial是一个扩展方法

public class BlackMagicMvcHelper
    {
        private static HtmlHelper GetHtmlHelper()
        {
            var controllerContext = new ControllerContext
            {
                HttpContext = new HttpContextWrapper(HttpContext.Current),
                RouteData = new RouteData()
            };

            controllerContext.RouteData.Values["controller"] = "does-not-exist";

            var context = new ViewContext(controllerContext,
                new WebFormView(controllerContext, "does-not-exist", string.Empty),
                new ViewDataDictionary(),
                new TempDataDictionary(),
                TextWriter.Null);

            var helper = new HtmlHelper(context, new ViewPage());

            return helper;
        }

        public MvcHtmlString ActionLink<TController>(Expression<Action<TController>> action, string linkText) where TController : Controller
        {
            var helper = GetHtmlHelper();
            return helper.ActionLink(action, linkText);
        }

        public MvcHtmlString Partial(string partialName)
        {
            var helper = GetHtmlHelper();
            return helper.Partial(partialName);
        }

        public MvcHtmlString RenderAction<TController>(Expression<Action<TController>> action) where TController : Controller
        {
            var helper = GetHtmlHelper();

            var routeValues = ExpressionHelper.GetRouteValuesFromExpression(action);

            return helper.Action((string)routeValues["action"], (string)routeValues["controller"], routeValues);
        }
    }

加载页面后,我收到错误:

部分视图&#39; HomepageWidget&#39;找不到或没有视图引擎支持搜索的位置。搜索了以下位置:

~/Views/does-not-exist/HomepageWidget.aspx
~/Views/does-not-exist/HomepageWidget.ascx
~/Views/Shared/HomepageWidget.aspx
~/Views/Shared/HomepageWidget.ascx
~/Views/does-not-exist/HomepageWidget.cshtml
~/Views/does-not-exist/HomepageWidget.vbhtml
~/Views/Shared/HomepageWidget.cshtml
~/Views/Shared/HomepageWidget.vbhtml

对我做错了什么的建议?

0 个答案:

没有答案