32

多くのレガシー Web フォーム ページを含むプロジェクトに MVC を追加しています。これはうまくいきます。ただし、現在、MVC 用と Web フォーム用に別々のマスターページがあります。2 つのマスター ページは、基本的に同じ出力を生成します。私は本当にWebフォームを1つ殺し、すべてのページでMVCマスターページを使用してDRYのままにしたいと思っています。

両方を変更するのを忘れたとき、DRYではないことですでに数回噛まれました。

私は明白な方法を試し、MVC マスターページで Web フォーム コンテンツ ページの MasterPage 属性をポイントするだけでした。これにより、MVC マスターは MVC ビューでのみ機能するというエラーがスローされます。

これは、MVC プロジェクトと Web フォーム プロジェクトが混在する場合によくある問題のようです。私の MVC マスターは ViewData で何もしていないので、Web フォームがそれらを使用できない理由はわかりません。

4

3 に答える 3

27

同じマスター ページを完全に共有できます。MVC マスター ページは、その MasterPageFile 属性を介して WebForms マスターページを指すだけである必要があります。これにより、WebForms MasterPage スタイルが MVC MasterPage に適用されます。

このセットアップを本番環境で使用しています。

Web フォーム マスター ページを指す MVC マスター ページの宣言:

<%@ Master Language="C#" MasterPageFile="~/MasterPage/Site.Master"
AutoEventWireup="true" Inherits="System.Web.Mvc.ViewMasterPage" %>

魅力のように機能します。

于 2009-05-08T19:33:41.143 に答える
8

このブログ投稿では、WebForm と MVC のマスター ページをほとんどまたはまったく重複させずに共有するために必要な手順について説明します。また、ダウンロードできるサンプル プロジェクトも含まれており、非常に役に立ちました。

私が遭遇した問題の 1 つは、ヘッダーで LoginStatus コントロールを使用していたことです。LoginStatus はフォーム内にある必要があるため、ルート マスター ページでは使用できませんでした (すべての MVC ページでネストされたフォームになってしまいたくないため)。しかし、これはルート マスター ページの単純なコード ブロックに置き換えるのが非常に簡単なコントロールでした。

于 2010-05-11T21:08:26.117 に答える
0

私の Web フォーム アプリでは、マスター ページは "HLPUSD.SMART.SMARTMaster" から継承されます。これは、アプリケーションの名前空間であり、Web フォーム クラスの名前です。

私の MVC プロジェクトでは、マスター ページは "System.Web.Mvc.ViewMasterPage" から継承されます。

私はこれが何か関係があると思いますか?

于 2009-05-08T19:40:56.463 に答える