2011-09-13 33 views
2

我試圖做什麼斯科特Hanselman的描述如下:混合剃刀視圖和Web窗體母版頁

http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

我有背後的代碼Web窗體用戶控件從Web窗體調用,未在剃刀布局工作剃刀母版頁:

<div id="navtop"> 
    @{ Html.RenderPartial("~/Controls/MasterPageMenu.ascx"); } 
</div> 

用戶控件包含以下內容:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MasterPageMenu.ascx.cs" Inherits="Controls.MasterPageMenu" %> 

我收到錯誤: '〜/ Controls/MasterPageMenu.ascx'中的視圖必須來自ViewPage,ViewPage,ViewUserControl或ViewUserControl。

讓我在剃刀視圖世界中工作時錯過了什麼?

回答

4

這應該工作,只要確保從ViewUserControl您的部分導出:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl" 
%> 

請記住,在ASP.NET MVC使用服務器端控件不是唯一的建議甚至與一些的WebForms視圖引擎,而不是東西你甚至應該試圖去做。在ASP.NET MVC中,您擁有佈局(如果使用WebForms視圖引擎,則爲母版頁),視圖和部分。就這樣。用戶控件屬於經典的WebForms,而不屬於ASP.NET MVC。

+0

如果我這樣做了,我就失去了在動態創建菜單的用戶控件中運行代碼的能力。我必須移動該代碼才能在用戶控件的aspx文件中運行嗎?同意您的意見 - 這是使用WebForms視圖引擎構建的整個網站的橋樑解決方案。 – RSchmitt

+0

@RSchmit,你爲什麼在ASP.NET MVC應用程序中討論後面的代碼?這樣的事情不復存在。忘掉它們。如果您有一些現有的代碼,在等待遷移到MVC時保留它,請保持這些WebForms的方式並逐步遷移它們。但絕對不要試圖用這種東西污染ASP.NET MVC應用程序。這是譴責失敗。 –

+0

同意你 - 這是一個布朗菲爾德應用程序,我正在嘗試使用Razor視圖引擎進行新的增強。有很多污染!我仍然對Scott Hanselman建議的解決方案感到困惑,因爲他說你可以參考Razor Layout中的WebForm用戶控件。這是唯一的情況下用戶控件沒有代碼嗎?此用戶控件背後的現有代碼通過Menu服務器控件動態地爲網站創建菜單。我想我可以將代碼移動到aspx文件並在那裏動態創建菜單? – RSchmitt