1

同じ会社に 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 拡張子の定義を表示します。ボックスを再起動して何が起こるかを確認します。:(

最終更新

コメントに投稿したように、エラーが見つかりましたが、それはまったく別のファイルに関係していたため、コードの問題ではなく、基本的に私のミスでした。:(

4

2 に答える 2

0

web.config の codedom セクションでコンパイラが 3.5 に設定されていることを確認しましたか? HTMLヘルパーを使用できない理由を突き止めるために何時間も戦いました.ほとんどの投稿は、インテリセンスに必要なSystem.Web.Mvc.Html名前空間を追加することを勧めていますが、ページはレンダリングされるまでコンパイルされないためです.あなたはこれが偽りのセキュリティであることに気づいていません。コンパイラのバージョンの問題を修正する投稿は次のとおりです: HtmlHelper への独自の拡張機能の作成に関する問題

于 2009-12-02T11:22:54.920 に答える
0

Form (のようにInherits="MainWeb.Views.EmailToFriend.Form") が MVC の ViewPage 基本クラスから継承されていることは確かですか?

私の推測では、あなたはどちらかが欲しいです

Inherits="System.Web.Mvc.ViewPage"

また

namespace MainWeb.Views.EmailToFriend
{
    public class Form : System.Web.Mvc.ViewPage
    {
    }
}

ほとんどの場合、も必要ありませんCodeBehind="Form.ascx.cs"。プロジェクトに MVC ビューの代わりに通常の Web フォームを追加しましたか?

于 2009-07-08T16:27:36.457 に答える