2011-07-08 11 views
4

私のWebアプリケーションはAsp.Net MVCパターンです。 .aspxページにコードビハインドファイルはありません。私はアプリケーションがMVCパターンに従っているので、.aspxページにはコードビハインドファイルがないと言われました。すべてのC#コーディングはインラインで行われます。Asp.netページのコードビハインドファイルがMVCにあるべきです

私の質問は、MVCパターンに従えば、.aspxページのファイルの背後にコードを置いてはいけないということです。私はこれらの.aspxページと、インラインコーディングを行う従来のASPページとの間に違いは見られません。 Asp.Netを利用し、コード/ htmlを作成するために、すべての.aspxページのファイルを隠すべきではありませんか?

誰かがこれを明確に説明できるのは素晴らしいことです。

ありがとうございます。

答えて

5

Asp.net MVCは、コードビハインドを使用しません。しかし。あなたのページは伝統的なASPページではないと考えてはいけません。ほとんどの処理(コードビハインドのように)はコントローラのアクション内で行われます。 ASPXページでは、処理の結果がほとんど表示されません(アクション結果がViewResultまたはPartialViewResultの場合)。

コントローラのアクション「です」というのは、多くのASPXファイルのコードの後ろにあります。

もちろんこれは非常に単純化されていますが、このように理解できます。

補足説明

あなたは、ASPXファイルでC#のコードを書くことがASPコードを書くと非常に似ていると主張しているが、私はあなたがしばらくの間それを考えさせる許すことができます。 Asp.netのWebフォームでは、あなたは基本的に何をしたか

<asp:Repeater ... /> 

を追加するたびに、いくつかの追加機能を備えたさまざまな形でforeach声明でした。 Asp.net MVCでは、あなたが書いたものは実際のforeachステートメントであり、必要な追加機能があります。あなただけの追加機能なしのアイテムをレンダリングするよ時間の大半はそうforeachは次のようになります。HTMLは、各項目ごとにレンダリングするので

  • 単純豊かなサーバ側制御よりも速く
    1. 、約になります。それは(状態のように)、インスタンス化を実行して保存する必要があるだけのシンプルな言語構造ではなく、いくつかのサーバー側のコントロールだから、
    2. 少ないリソース空腹のリピーターアイテムのテンプレートと同じ

    なぜすることができますコントローラのアクションは、多くのASPXのコードビハインドですか?

    私たちも何このコードがないことはそれほど単純なくらいにつながる両方の状態を処理する必要がありますいくつかの複雑なページライフサイクルの処理よりもあることは言うまでもありませんコード

    public ActionResult Index() 
    { 
        var data = /* get some data */ 
        if (data.Count > 0) 
        { 
         /* first ASPX */ 
         return View("DisplayItems", data); 
        } 
        else 
        { 
         /* second ASPX */ 
         result View("DisplayEmpty"); 
        } 
    } 
    

    のこの種を持っている可能性があるのですべてのHTMLを持つより複雑なASPXファイル

    In Asp。ネットMVCコードは非常にシンプル/ベーシックです。なぜなら、それぞれが1つのステート/状況/目的を提供するだけなので、実行する必要があるだけで、ビューもずっと簡単ですからです。 Asp.net WebFormsのようなマルチファイリングはありません。

  • +0

    .aspxページでHTMLとコードを維持するのはどうでしょうか?私のプロジェクトは、頻繁なUIと新しい機能の追加/変更を受けます。 HTMLとインラインコードはすべて結びついているので、変更を行うことは困難です。このようなシナリオでは、MVCに行くべきでしょうか? – Derin

    +0

    @Derin:Asp.net WebFormsアプリケーションは、C#コードの多くをカプセル化するASPXファイルで構成されていると言っていますか?そうだとしたら、いいえ。コントローラーアクション**は、ビューファイル**に含めることはできません。コントローラは別のクラスです。私はビュー内でそれらを定義しようとしたことはありませんが、ビューが通常はプリコンパイルされず、コントローラクラスが利用できないので、動作しないはずです。 –

    0

    MVCにコードビハインドはありません。 MVCはただ単にテンプレートエンジンとしてのaspxを使用している.aspxページの

    2

    なしファイル

    の背後にあるコードを持っていない(彼らは今、好みのテンプレートエンジンとしてレイザーにシフトしているので、おそらく、アウト速い放出を得るために)

    それはそうであるべきです。ページライフサイクルのさまざまなイベントを購読する従来のWebFormsのコードは、もはやMVCで行われなくてはなりません。この作業はコントローラによって実行されます。あなたの.aspxページにはもちろん、TextBoxFor、EditorFor、ActionLinkなどのHTMLヘルパーとUrlヘルパーを使用するために、いくつかのインラインサーバーサイドコードが含まれている可能性があります。

    たとえば、Razorなどの別のビューエンジンを考えてみましょう。コードビハインドという概念は存在しません。したがって、WebFormsビューエンジンにコードが残っているという事実は、従来のASP.NET WebFormsの遺産であり、MVCでは使用されていないためです。

    +0

    .aspxページでhtmlとコードを維持することはどうでしょうか。私のプロジェクトは、頻繁なUIと新しい機能の追加/変更を受けます。 HTMLとインラインコードはすべて結びついているので、変更を行うことは困難です。このようなシナリオでは、MVCに行くべきでしょうか? – Derin

    +0

    @Derin、私はこの問題が何であるかわかりません。 WebFormsのタグスープが気に入らない場合は、IMHOが構文を理解しやすくするために、いつもRazorビューエンジンのために行くことができます。 –

    0

    ビューにファイルの背後にコードがないようにする必要はありません(webforms viewengineまたはrazor viewengine)。 mvcの本質は、あなたがビュー内に決して論理を持ってはいけないということです。ほとんどの場合、ループを使用することができます(多くの人がエディタテンプレートを使用してループを回避します)。条件文を使用すると、HTMLを条件付きでレンダリングできます。したがって、ビューにロジックがない場合は、コードがまったく必要ありません。あなたのビューを制御するときは、Modelのすべてのものを設定する必要があります。ビュー固有のロジックがあると思われる場合

    関連する問題