同じ会社に 2 つの別々のフロント エンド プロジェクトがありますが、すべての html と css を除いて基本的に同じです。(同じ社内の別の部署)あるページで作成したページを別のページに追加しようとしています。(はい、はい、2 つの別個の同じコードベースを維持する必要がないように、どの部門のインスタンスが実行されているかに基づいて異なるプレゼンテーションを表示する単一のアプリを作成する必要があったことはわかっていますが、それはできません。このクライアントと一緒にそこにいます。)
とにかく、コントローラー、モデル、aspx および ascx ページをコピーしました。変更する必要があったのは、ルート名前空間の名前だけでした。何らかの理由で、最初のプロジェクトで正常にコンパイルされた特定の ascx ページが、2 番目のプロジェクトで失敗します。
エラーメッセージは次のとおりです。
e:\pathtocode\Web\Views\EmailToFriend\Email.ascx(24): error CS1061:
'System.Web.Mvc.HtmlHelper<MainWeb.Models.EmailToFriend>' does not contain a definition for
'TextBox' and no extension method 'TextBox' accepting a first argument of type
'System.Web.Mvc.HtmlHelper<MainWeb.Models.EmailToFriend>'
could be found (are you missing a using directive or an assembly reference?)
ascx のコードは次のとおりです。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Form.ascx.cs"
Inherits="MainWeb.Views.EmailToFriend.Form" %>
<%@ Import Namespace="System.Web.Mvc" %>
<table>
<span class="error" style="color: red;">
<%= Model.ErrorString %>
</span>
<tr>
<td>Friend's Name: </td>
<td><%= Html.TextBox("RecipientName", Model.RecipientName)%></td>
</tr>
<tr>
<td>Friend's Email Address: </td>
<td><%= Html.TextBox("RecipientAddress", Model.RecipientEmail)%></td>
</tr>
<tr>
<td>Your Name: </td>
<td><%= Html.TextBox("SenderName", Model.SenderName ?? UserName)%></td>
</tr>
<tr>
<td>Your Email Address: </td>
<td><%= Html.TextBox("SenderAddress", Model.SenderEmail ?? UserEmail)%></td>
</tr>
<tr>
<td>Message</td>
<td><%= Html.TextArea("Message", Model.Message) %></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Send" style="float: right;"/></td>
</tr>
</table>
私は考えられるすべてのものをいじくり回してきました。Html.TextBox は同じプロジェクト内の他のファイルで正常に動作するため、これがチャンクを吹き飛ばしている理由がわかりません。
アップデート
このコードが機能するプロジェクトでは、VS はプロジェクトを MVC Web アプリケーションとして認識しますが、機能しない 2 番目のプロジェクトでは、VS はそれが MVC であることを認識しません。少なくとも Views サブフォルダーを右クリックすると、前者には「新しいビュー」のコンテキスト メニュー項目があり、後者のプロジェクトにはこれがありません。
今私がしなければならないのは、それを MVC プロジェクトに変換する方法を見つけ出すことだけです。
更新 #2
ドラット、それはうまくいきませんでした。System.Web.Mvc.Html を使用するように Import ディレクティブを変更しました。これで、少なくとも intellisense が .TextBox 拡張子の定義を表示します。ボックスを再起動して何が起こるかを確認します。:(
最終更新
コメントに投稿したように、エラーが見つかりましたが、それはまったく別のファイルに関係していたため、コードの問題ではなく、基本的に私のミスでした。:(